Commit 6bf3f20d authored by Corey Frang's avatar Corey Frang Committed by Dave Methvin

Fix #7157. Animation callbacks shouldn't see an element as :animated.

Unless of course, there are other animations to be done! Closes gh-775.
parent f1dcaad0
...@@ -49,6 +49,7 @@ function callTweeners( animation, props ) { ...@@ -49,6 +49,7 @@ function callTweeners( animation, props ) {
length = collection.length; length = collection.length;
for ( ; index < length; index++ ) { for ( ; index < length; index++ ) {
if ( collection[ index ].call( animation, prop, value ) ) { if ( collection[ index ].call( animation, prop, value ) ) {
// we're done with this property // we're done with this property
return; return;
} }
...@@ -63,14 +64,33 @@ function Animation( elem, properties, options ) { ...@@ -63,14 +64,33 @@ function Animation( elem, properties, options ) {
length = animationPrefilters.length, length = animationPrefilters.length,
finished = jQuery.Deferred(), finished = jQuery.Deferred(),
deferred = jQuery.Deferred().always(function( ended ) { deferred = jQuery.Deferred().always(function( ended ) {
// remove cirular reference
delete animation.tick;
// don't match elem in the :animated selector
delete tick.elem;
if ( deferred.state() === "resolved" || ended ) { if ( deferred.state() === "resolved" || ended ) {
// fire callbacks // fire callbacks
finished.resolveWith( this ); finished.resolveWith( this );
} }
}), }),
tick = function() {
var currentTime = fxNow || createFxNow(),
remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
percent = 1 - ( remaining / animation.duration || 0 ),
index = 0,
length = animation.tweens.length;
for ( ; index < length ; index++ ) {
animation.tweens[ index ].run( percent );
}
if ( percent < 1 && length ) {
return remaining;
} else {
deferred.resolveWith( elem, [ currentTime ] );
return false;
}
},
animation = deferred.promise({ animation = deferred.promise({
elem: elem, elem: elem,
props: jQuery.extend( {}, properties ), props: jQuery.extend( {}, properties ),
...@@ -87,24 +107,6 @@ function Animation( elem, properties, options ) { ...@@ -87,24 +107,6 @@ function Animation( elem, properties, options ) {
animation.tweens.push( tween ); animation.tweens.push( tween );
return tween; return tween;
}, },
tick: function() {
var currentTime = fxNow || createFxNow(),
remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
percent = 1 - ( remaining / animation.duration || 0 ),
index = 0,
length = animation.tweens.length;
for ( ; index < length ; index++ ) {
animation.tweens[ index ].run( percent );
}
if ( percent < 1 && length ) {
return remaining;
} else {
deferred.resolveWith( elem, [ currentTime ] );
return false;
}
},
stop: function( gotoEnd ) { stop: function( gotoEnd ) {
var index = 0, var index = 0,
// if we are going to the end, we want to run all the tweens // if we are going to the end, we want to run all the tweens
...@@ -132,13 +134,13 @@ function Animation( elem, properties, options ) { ...@@ -132,13 +134,13 @@ function Animation( elem, properties, options ) {
callTweeners( animation, props ); callTweeners( animation, props );
jQuery.extend( animation.tick, { jQuery.fx.timer(
anim: animation, jQuery.extend( tick, {
queue: animation.opts.queue, anim: animation,
elem: elem queue: animation.opts.queue,
}); elem: elem
})
jQuery.fx.timer( animation.tick ); );
return animation; return animation;
} }
......
...@@ -1509,3 +1509,14 @@ asyncTest( "User supplied callback called after show when fx off (#8892)", 2, fu ...@@ -1509,3 +1509,14 @@ asyncTest( "User supplied callback called after show when fx off (#8892)", 2, fu
}); });
}); });
}); });
asyncTest("Animation callback should not show animated element as animated (#7157)", 1, function() {
var foo = jQuery( "#foo" );
foo.animate({
opacity: 0
}, 100, function() {
ok( !foo.is(':animated'), "The element is not animated" );
start();
});
});
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment