mirror of
https://github.com/jquery/jquery.git
synced 2026-04-20 03:01:22 -04:00
Fix #7157. Animation callbacks shouldn't see an element as :animated.
Unless of course, there are other animations to be done! Closes gh-775.
This commit is contained in:
committed by
Dave Methvin
parent
f1dcaad097
commit
6bf3f20d4e
56
src/effects.js
vendored
56
src/effects.js
vendored
@@ -49,6 +49,7 @@ function callTweeners( animation, props ) {
|
||||
length = collection.length;
|
||||
for ( ; index < length; index++ ) {
|
||||
if ( collection[ index ].call( animation, prop, value ) ) {
|
||||
|
||||
// we're done with this property
|
||||
return;
|
||||
}
|
||||
@@ -63,14 +64,33 @@ function Animation( elem, properties, options ) {
|
||||
length = animationPrefilters.length,
|
||||
finished = jQuery.Deferred(),
|
||||
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 ) {
|
||||
|
||||
// fire callbacks
|
||||
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({
|
||||
elem: elem,
|
||||
props: jQuery.extend( {}, properties ),
|
||||
@@ -87,24 +107,6 @@ function Animation( elem, properties, options ) {
|
||||
animation.tweens.push( 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 ) {
|
||||
var index = 0,
|
||||
// if we are going to the end, we want to run all the tweens
|
||||
@@ -132,13 +134,13 @@ function Animation( elem, properties, options ) {
|
||||
|
||||
callTweeners( animation, props );
|
||||
|
||||
jQuery.extend( animation.tick, {
|
||||
anim: animation,
|
||||
queue: animation.opts.queue,
|
||||
elem: elem
|
||||
});
|
||||
|
||||
jQuery.fx.timer( animation.tick );
|
||||
jQuery.fx.timer(
|
||||
jQuery.extend( tick, {
|
||||
anim: animation,
|
||||
queue: animation.opts.queue,
|
||||
elem: elem
|
||||
})
|
||||
);
|
||||
return animation;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user