Hi,
> I'm not sure how to change the line:
> setTimeout("zoom_in()",time_length)
> to that the function can call itself. Help appreciated.
I'd suggest to split it in two functions as many parts of jQuery itsself do:
jQuery.zoom_in = function(elm,time,step,callback) {
var e = $(elm);
if( !e.is('img') ) return;
var w = e.attr("width");
if( w == 0 ) elm.border = 0;
else {
var newWidth = w + step;
var ratio = e.attr("height") / w;
if(newWidth < max_width) {
e.attr("width", newWidth).
attr("height", Math.round(newWidth*ratio));
window.setTimeout(function() {
jQuery.zoom_in(elm,time,step,callback);
},time);
} else callback.apply(elm,[]);
}
}
jQuery.zoom_in.defaultTime = 42;
jQuery.zoom_in.defaultStep = 42;
jQuery.zoom_in.defaultCallback = function(){};
jQuery.fn.zoom_in() {
var i = 0;
var time = jQuery.zoom_in.defaultTime;
if( typeof arguments[i] == 'number' && isFinite(arguments[i]) )
time = arguments[i++];
var step = jQuery.zoom_in.defaultStep;
if( typeof arguments[i] == 'number' && isFinite(arguments[i]) )
step = arguments[i++];
var callback = jQuery.zoom_in.defaultCallback;
if( typeof arguments[i] == 'function' )
callback = arguments[i];
return this.each(function() {
jQuery.zoom_in(this,time,step,callback);
});
}
You don't need to test for the parameters again and again and your
timeout-function doesn't need 'this' set correctly.
If you like to use the pause-plugin
(http://blog.mythin.net/projects/jquery.php), you can write
if(newWidth < max_width) {
e.attr("width", newWidth).
attr("height", Math.round(newWidth*image_scale)).
pause(time).
zoom_in(time,callback);
} else callback.apply(elm,[]);
But that needs a bit more CPU-ressources, because you call the function
jQuery.fn.zoom_in() which tests for the given parameters again and again. If
you whant to scale many pictures on the page simultaniously, don't use it.
Christof
_______________________________________________
jQuery mailing list
[email protected]
http://jquery.com/discuss/