X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Ffx%2Ffx.js;h=7c5ba445559f04b15ad95005300c8d97c7e9315f;hb=ad5539bab3e1d6806e054dd5b14cf341a675ded0;hp=acd51226a5bce153d7930101d2b96d77eff93151;hpb=5bb0902c5ef4cf767a5940799826e57f2fcfdd34;p=jquery.git diff --git a/src/fx/fx.js b/src/fx/fx.js index acd5122..7c5ba44 100644 --- a/src/fx/fx.js +++ b/src/fx/fx.js @@ -1,37 +1,4 @@ jQuery.fn.extend({ - - /** - * Displays each of the set of matched elements if they are hidden. - * - * @example $("p").show() - * @before

Hello

- * @result [

Hello

] - * - * @name show - * @type jQuery - * @cat Effects - */ - - /** - * Show all matched elements using a graceful animation and firing an - * optional callback after completion. - * - * The height, width, and opacity of each of the matched elements - * are changed dynamically according to the specified speed. - * - * @example $("p").show("slow"); - * - * @example $("p").show("slow",function(){ - * alert("Animation Done."); - * }); - * - * @name show - * @type jQuery - * @param String|Number speed A string representing one of the three predefined speeds ("slow", "normal", or "fast") or the number of milliseconds to run the animation (e.g. 1000). - * @param Function callback (optional) A function to be executed whenever the animation completes. - * @cat Effects - * @see hide(String|Number,Function) - */ show: function(speed,callback){ return speed ? this.animate({ @@ -45,38 +12,6 @@ jQuery.fn.extend({ }).end(); }, - /** - * Hides each of the set of matched elements if they are shown. - * - * @example $("p").hide() - * @before

Hello

- * @result [

Hello

] - * - * @name hide - * @type jQuery - * @cat Effects - */ - - /** - * Hide all matched elements using a graceful animation and firing an - * optional callback after completion. - * - * The height, width, and opacity of each of the matched elements - * are changed dynamically according to the specified speed. - * - * @example $("p").hide("slow"); - * - * @example $("p").hide("slow",function(){ - * alert("Animation Done."); - * }); - * - * @name hide - * @type jQuery - * @param String|Number speed A string representing one of the three predefined speeds ("slow", "normal", or "fast") or the number of milliseconds to run the animation (e.g. 1000). - * @param Function callback (optional) A function to be executed whenever the animation completes. - * @cat Effects - * @see show(String|Number,Function) - */ hide: function(speed,callback){ return speed ? this.animate({ @@ -94,19 +29,6 @@ jQuery.fn.extend({ // Save the old toggle function _toggle: jQuery.fn.toggle, - /** - * Toggles each of the set of matched elements. If they are shown, - * toggle makes them hidden. If they are hidden, toggle - * makes them shown. - * - * @example $("p").toggle() - * @before

Hello

Hello Again

- * @result [

Hello

,

Hello Again

] - * - * @name toggle - * @type jQuery - * @cat Effects - */ toggle: function( fn, fn2 ){ return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ? this._toggle( fn, fn2 ) : @@ -119,222 +41,67 @@ jQuery.fn.extend({ }); }, - /** - * Reveal all matched elements by adjusting their height and firing an - * optional callback after completion. - * - * Only the height is adjusted for this animation, causing all matched - * elements to be revealed in a "sliding" manner. - * - * @example $("p").slideDown("slow"); - * - * @example $("p").slideDown("slow",function(){ - * alert("Animation Done."); - * }); - * - * @name slideDown - * @type jQuery - * @param String|Number speed (optional) A string representing one of the three predefined speeds ("slow", "normal", or "fast") or the number of milliseconds to run the animation (e.g. 1000). - * @param Function callback (optional) A function to be executed whenever the animation completes. - * @cat Effects - * @see slideUp(String|Number,Function) - * @see slideToggle(String|Number,Function) - */ slideDown: function(speed,callback){ return this.animate({height: "show"}, speed, callback); }, - /** - * Hide all matched elements by adjusting their height and firing an - * optional callback after completion. - * - * Only the height is adjusted for this animation, causing all matched - * elements to be hidden in a "sliding" manner. - * - * @example $("p").slideUp("slow"); - * - * @example $("p").slideUp("slow",function(){ - * alert("Animation Done."); - * }); - * - * @name slideUp - * @type jQuery - * @param String|Number speed (optional) A string representing one of the three predefined speeds ("slow", "normal", or "fast") or the number of milliseconds to run the animation (e.g. 1000). - * @param Function callback (optional) A function to be executed whenever the animation completes. - * @cat Effects - * @see slideDown(String|Number,Function) - * @see slideToggle(String|Number,Function) - */ slideUp: function(speed,callback){ return this.animate({height: "hide"}, speed, callback); }, - /** - * Toggle the visibility of all matched elements by adjusting their height and firing an - * optional callback after completion. - * - * Only the height is adjusted for this animation, causing all matched - * elements to be hidden in a "sliding" manner. - * - * @example $("p").slideToggle("slow"); - * - * @example $("p").slideToggle("slow",function(){ - * alert("Animation Done."); - * }); - * - * @name slideToggle - * @type jQuery - * @param String|Number speed (optional) A string representing one of the three predefined speeds ("slow", "normal", or "fast") or the number of milliseconds to run the animation (e.g. 1000). - * @param Function callback (optional) A function to be executed whenever the animation completes. - * @cat Effects - * @see slideDown(String|Number,Function) - * @see slideUp(String|Number,Function) - */ slideToggle: function(speed, callback){ return this.animate({height: "toggle"}, speed, callback); }, - /** - * Fade in all matched elements by adjusting their opacity and firing an - * optional callback after completion. - * - * Only the opacity is adjusted for this animation, meaning that - * all of the matched elements should already have some form of height - * and width associated with them. - * - * @example $("p").fadeIn("slow"); - * - * @example $("p").fadeIn("slow",function(){ - * alert("Animation Done."); - * }); - * - * @name fadeIn - * @type jQuery - * @param String|Number speed (optional) A string representing one of the three predefined speeds ("slow", "normal", or "fast") or the number of milliseconds to run the animation (e.g. 1000). - * @param Function callback (optional) A function to be executed whenever the animation completes. - * @cat Effects - * @see fadeOut(String|Number,Function) - * @see fadeTo(String|Number,Number,Function) - */ fadeIn: function(speed, callback){ return this.animate({opacity: "show"}, speed, callback); }, - /** - * Fade out all matched elements by adjusting their opacity and firing an - * optional callback after completion. - * - * Only the opacity is adjusted for this animation, meaning that - * all of the matched elements should already have some form of height - * and width associated with them. - * - * @example $("p").fadeOut("slow"); - * - * @example $("p").fadeOut("slow",function(){ - * alert("Animation Done."); - * }); - * - * @name fadeOut - * @type jQuery - * @param String|Number speed (optional) A string representing one of the three predefined speeds ("slow", "normal", or "fast") or the number of milliseconds to run the animation (e.g. 1000). - * @param Function callback (optional) A function to be executed whenever the animation completes. - * @cat Effects - * @see fadeIn(String|Number,Function) - * @see fadeTo(String|Number,Number,Function) - */ fadeOut: function(speed, callback){ return this.animate({opacity: "hide"}, speed, callback); }, - /** - * Fade the opacity of all matched elements to a specified opacity and firing an - * optional callback after completion. - * - * Only the opacity is adjusted for this animation, meaning that - * all of the matched elements should already have some form of height - * and width associated with them. - * - * @example $("p").fadeTo("slow", 0.5); - * - * @example $("p").fadeTo("slow", 0.5, function(){ - * alert("Animation Done."); - * }); - * - * @name fadeTo - * @type jQuery - * @param String|Number speed A string representing one of the three predefined speeds ("slow", "normal", or "fast") or the number of milliseconds to run the animation (e.g. 1000). - * @param Number opacity The opacity to fade to (a number from 0 to 1). - * @param Function callback (optional) A function to be executed whenever the animation completes. - * @cat Effects - * @see fadeIn(String|Number,Function) - * @see fadeOut(String|Number,Function) - */ fadeTo: function(speed,to,callback){ return this.animate({opacity: to}, speed, callback); }, - /** - * A function for making your own, custom animations. The key aspect of - * this function is the object of style properties that will be animated, - * and to what end. Each key within the object represents a style property - * that will also be animated (for example: "height", "top", or "opacity"). - * - * Note that properties should be specified using camel case - * eg. marginLeft instead of margin-left. - * - * The value associated with the key represents to what end the property - * will be animated. If a number is provided as the value, then the style - * property will be transitioned from its current state to that new number. - * Otherwise if the string "hide", "show", or "toggle" is provided, a default - * animation will be constructed for that property. - * - * @example $("p").animate({ - * height: 'toggle', opacity: 'toggle' - * }, "slow"); - * - * @example $("p").animate({ - * left: 50, opacity: 'show' - * }, 500); - * - * @example $("p").animate({ - * opacity: 'show' - * }, "slow", "easein"); - * @desc An example of using an 'easing' function to provide a different style of animation. This will only work if you have a plugin that provides this easing function (Only "swing" and "linear" are provided by default, with jQuery). - * - * @name animate - * @type jQuery - * @param Hash params A set of style attributes that you wish to animate, and to what end. - * @param String|Number speed (optional) A string representing one of the three predefined speeds ("slow", "normal", or "fast") or the number of milliseconds to run the animation (e.g. 1000). - * @param String easing (optional) The name of the easing effect that you want to use (e.g. "swing" or "linear"). Defaults to "swing". - * @param Function callback (optional) A function to be executed whenever the animation completes. - * @cat Effects - */ animate: function( prop, speed, easing, callback ) { return this.queue(function(){ var hidden = jQuery(this).is(":hidden"), opt = jQuery.speed(speed, easing, callback), self = this; - for ( var p in prop ) + for ( var p in prop ) { if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden ) return jQuery.isFunction(opt.complete) && opt.complete.apply(this); + if ( p == "height" || p == "width" ) { + // Store display property + opt.display = jQuery.css(this, "display"); + + // Make sure that nothing sneaks out + opt.overflow = this.style.overflow; + } + } + + if ( opt.overflow != null ) + this.style.overflow = "hidden"; + this.curAnim = jQuery.extend({}, prop); jQuery.each( prop, function(name, val){ var e = new jQuery.fx( self, opt, name ); if ( val.constructor == Number ) - e.custom( e.cur(), val ); + e.custom( e.cur() || 0, val ); else e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop ); }); + + // For JS strict compliance + return true; }); }, - /** - * - * @private - */ queue: function(type,fn){ if ( !fn ) { fn = type; @@ -353,6 +120,16 @@ jQuery.fn.extend({ if ( this.queue[type].length == 1 ) fn.apply(this); }); + }, + + stop: function(){ + var timers = jQuery.timers; + + return this.each(function(){ + for ( var i = 0; i < timers.length; i++ ) + if ( timers[i].elem == this ) + timers.splice(i--, 1); + }); } }); @@ -364,7 +141,7 @@ jQuery.extend({ complete: fn || !fn && easing || jQuery.isFunction( speed ) && speed, duration: speed, - easing: fn && easing || easing && easing.constructor != Function && easing || (jQuery.easing.swing ? "swing" : "linear") + easing: fn && easing || easing && easing.constructor != Function && easing }; opt.duration = (opt.duration && opt.duration.constructor == Number ? @@ -409,28 +186,11 @@ jQuery.extend({ timers: [], - /* - * I originally wrote fx() as a clone of moo.fx and in the process - * of making it small in size the code became illegible to sane - * people. You've been warned. - */ - fx: function( elem, options, prop ){ - var z = this; - - // The styles - var y = elem.style; + var z = this, y = elem.style, + isprop = elem[prop] != null && y[prop] == null; - if ( prop == "height" || prop == "width" ) { - // Store display property - var oldDisplay = jQuery.css(elem, "display"); - - // Make sure that nothing sneaks out - var oldOverflow = y.overflow; - y.overflow = "hidden"; - } - // Simple function for setting a style value z.a = function(){ if ( options.step ) @@ -439,8 +199,14 @@ jQuery.extend({ if ( prop == "opacity" ) jQuery.attr(y, "opacity", z.now); // Let attr handle opacity else { - y[prop] = parseInt(z.now) + "px"; - y.display = "block"; // Set display property to block for animation + if ( isprop ) + elem[prop] = parseInt(z.now); + else + y[prop] = parseInt(z.now) + "px"; + + // Set display property to block for height/width animations + if ( prop == "height" || prop == "width" ) + y.display = "block"; } }; @@ -451,6 +217,7 @@ jQuery.extend({ // Get the current size z.cur = function(){ + if ( isprop ) return elem[prop]; var r = parseFloat( jQuery.curCSS(elem, prop) ); return r && r > -10000 ? r : z.max(); }; @@ -461,9 +228,13 @@ jQuery.extend({ z.now = from; z.a(); - jQuery.timers.push(function(){ + function t(){ return z.step(from, to); - }); + } + + t.elem = elem; + + jQuery.timers.push(t); if ( jQuery.timers.length == 1 ) { var timer = setInterval(function(){ @@ -529,12 +300,12 @@ jQuery.extend({ done = false; if ( done ) { - if ( oldDisplay != null ) { + if ( options.display != null ) { // Reset the overflow - y.overflow = oldOverflow; + y.overflow = options.overflow; // Reset the display - y.display = oldDisplay; + y.display = options.display; if ( jQuery.css(elem, "display") == "none" ) y.display = "block"; } @@ -561,7 +332,7 @@ jQuery.extend({ var p = n / options.duration; // Perform the easing function, defaults to swing - z.now = jQuery.easing[options.easing](p, n, firstNum, (lastNum-firstNum), options.duration); + z.now = jQuery.easing[options.easing || (jQuery.easing.swing ? "swing" : "linear")](p, n, firstNum, (lastNum-firstNum), options.duration); // Perform the next step of the animation z.a();