3 // overwrite the old show method
7 * The effects module overloads the show method to now allow
8 * for a speed to the show operation. What actually happens is
9 * that the height, width, and opacity to the matched elements
10 * are changed dynamically. The only three current speeds are
11 * "slow", "normal", and "fast". For example:
12 * $("p").show("slow");
13 * Note: You should not run the show method on things
14 * that are already shown. This can be circumvented by doing this:
15 * $("p:hidden").show("slow");
17 show: function(speed,callback){
18 return speed ? this.animate({
19 height: "show", width: "show", opacity: "show"
20 }, speed, callback) : this._show();
23 // Overwrite the old hide method
24 _hide: jQuery.fn.hide,
27 * The hide function behaves very similary to the show function,
28 * but is just the opposite.
29 * $("p:visible").hide("slow");
31 hide: function(speed,callback){
32 return speed ? this.animate({
33 height: "hide", width: "hide", opacity: "hide"
34 }, speed, callback) : this._hide();
38 * This function increases the height and opacity for all matched
39 * elements. This is very similar to 'show', but does not change
40 * the width - creating a neat sliding effect.
41 * $("p:hidden").slideDown("slow");
43 slideDown: function(speed,callback){
44 return this.animate({height: "show"}, speed, callback);
48 * Just like slideDown, only it hides all matched elements.
49 * $("p:visible").slideUp("slow");
51 slideUp: function(speed,callback){
52 return this.animate({height: "hide"}, speed, callback);
56 * Adjusts the opacity of all matched elements from a hidden,
57 * to a fully visible, state.
58 * $("p:hidden").fadeIn("slow");
60 fadeIn: function(speed,callback){
61 return this.animate({opacity: "show"}, speed, callback);
65 * Same as fadeIn, but transitions from a visible, to a hidden state.
66 * $("p:visible").fadeOut("slow");
68 fadeOut: function(speed,callback){
69 return this.animate({opacity: "hide"}, speed, callback);
75 fadeTo: function(speed,to,callback){
76 return this.animate({opacity: to}, speed, callback);
82 animate: function(prop,speed,callback) {
83 return this.queue(function(){
85 for ( var p in prop ) {
86 var e = new jQuery.fx( this, jQuery.speed(speed,callback,i++), p );
87 if ( prop[p].constructor == Number )
88 e.custom( e.cur(), prop[p] );
99 queue: function(type,fn){
105 return this.each(function(){
109 if ( !this.queue[type] )
110 this.queue[type] = [];
112 this.queue[type].push( fn );
114 if ( this.queue[type].length == 1 )
123 setAuto: function(e,p) {
124 if ( e.notAuto ) return;
126 if ( p == "height" && e.scrollHeight != parseInt(jQuery.curCSS(e,p)) ) return;
127 if ( p == "width" && e.scrollWidth != parseInt(jQuery.curCSS(e,p)) ) return;
129 // Remember the original height
132 // Figure out the size of the height right now
133 var o = jQuery.curCSS(e,p,1);
135 if ( p == "height" && e.scrollHeight != o ||
136 p == "width" && e.scrollWidth != o ) return;
138 // Set the height to auto
139 e.style[p] = e.currentStyle ? "" : "auto";
141 // See what the size of "auto" is
142 var n = jQuery.curCSS(e,p,1);
144 // Revert back to the original size
145 if ( o != n && n != "auto" ) {
151 speed: function(s,o,i) {
154 if ( o.constructor == Function )
157 var ss = { slow: 600, fast: 200 };
158 o.duration = (s && s.constructor == Number ? s : ss[s]) || 400;
161 o.oldComplete = o.complete;
162 o.complete = function(){
163 jQuery.dequeue(this, "fx");
164 if ( o.oldComplete && o.oldComplete.constructor == Function )
165 o.oldComplete.apply( this );
176 dequeue: function(elem,type){
179 if ( elem.queue && elem.queue[type] ) {
181 elem.queue[type].shift();
184 var f = elem.queue[type][0];
186 if ( f ) f.apply( elem );
191 * I originally wrote fx() as a clone of moo.fx and in the process
192 * of making it small in size the code became illegible to sane
193 * people. You've been warned.
196 fx: function( elem, options, prop ){
202 duration: options.duration || 400,
203 complete: options.complete
212 // Simple function for setting a style value
214 if ( prop == "opacity" ) {
215 if (z.now == 1) z.now = 0.9999;
216 if (window.ActiveXObject)
217 y.filter = "alpha(opacity=" + z.now*100 + ")";
221 // My hate for IE will never die
222 } else if ( parseInt(z.now) )
223 y[prop] = parseInt(z.now) + "px";
227 // Figure out the maximum number to run to
229 return parseFloat( jQuery.css(z.el,prop) );
232 // Get the current size
234 return parseFloat( jQuery.curCSS(z.el, prop) ) || z.max();
237 // Start an animation from one number to another
238 z.custom = function(from,to){
239 z.startTime = (new Date()).getTime();
243 z.timer = setInterval(function(){
248 // Simple 'show' function
249 z.show = function( p ){
250 if ( !z.el.orig ) z.el.orig = {};
252 // Remember where we started, so that we can go back to it later
253 z.el.orig[prop] = this.cur();
255 z.custom( 0, z.el.orig[prop] );
257 // Stupid IE, look what you made me do
258 if ( prop != "opacity" )
262 // Simple 'hide' function
264 if ( !z.el.orig ) z.el.orig = {};
266 // Remember where we started, so that we can go back to it later
267 z.el.orig[prop] = this.cur();
271 // Begin the animation
275 // IE has trouble with opacity if it does not have layout
276 if ( jQuery.browser.msie && !z.el.currentStyle.hasLayout )
279 // Remember the overflow of the element
280 if ( !z.el.oldOverlay )
281 z.el.oldOverflow = jQuery.css( z.el, "overflow" );
283 // Make sure that nothing sneaks out
284 if ( z.el.oldOverlay == "visible" )
285 y.overflow = "hidden";
287 // Each step of an animation
288 z.step = function(firstNum, lastNum){
289 var t = (new Date()).getTime();
291 if (t > z.o.duration + z.startTime) {
293 clearInterval(z.timer);
299 // Hide the element if the "hide" operation was done
300 if ( z.o.hide ) y.display = 'none';
302 // Reset the overflow
303 y.overflow = z.el.oldOverflow;
305 // If a callback was provided, execute it
306 if( z.o.complete && z.o.complete.constructor == Function )
307 // Execute the complete function
308 z.o.complete.apply( z.el );
310 // Reset the property, if the item has been hidden
312 y[ prop ] = z.el.orig[ prop ].constructor == Number && prop != "opacity" ?
313 z.el.orig[prop] + "px" : z.el.orig[prop];
315 // set its height and/or width to auto
316 jQuery.setAuto( z.el, prop );
318 // Figure out where in the animation we are and set the number
319 var p = (t - this.startTime) / z.o.duration;
320 z.now = ((-Math.cos(p*Math.PI)/2) + 0.5) * (lastNum-firstNum) + firstNum;
322 // Perform the next step of the animation