Added a new .stop() method which stops all animations running on the matched set of elements.
Example: $("#foo").slideDown(1000); setTimeout(function(){ $("#foo").stop(); }, 500);
This commit is contained in:
parent
d5bb0e3179
commit
1ce8006d48
2 changed files with 39 additions and 2 deletions
18
src/fx/fx.js
18
src/fx/fx.js
|
@ -368,6 +368,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);
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
@ -466,9 +476,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(){
|
||||
|
|
|
@ -11,6 +11,29 @@ test("animate(Hash, Object, Function)", function() {
|
|||
});
|
||||
});
|
||||
|
||||
test("stop()", function() {
|
||||
expect(3);
|
||||
stop();
|
||||
reset();
|
||||
|
||||
var foo = $("#foo")[0];
|
||||
var h = foo.style.height;
|
||||
|
||||
$("#foo").slideUp(1000);
|
||||
setTimeout(function(){
|
||||
var nh = foo.style.height;
|
||||
ok( nh != h, "An animation occurred " + nh + " " + h );
|
||||
$("#foo").stop();
|
||||
|
||||
nh = foo.style.height;
|
||||
ok( nh != h, "Stop didn't reset the animation " + nh + " " + h );
|
||||
setTimeout(function(){
|
||||
equals( nh, foo.style.height, "The animation didn't continue" );
|
||||
start();
|
||||
}, 100);
|
||||
}, 100);
|
||||
});
|
||||
|
||||
test("toggle()", function() {
|
||||
expect(3);
|
||||
var x = $("#foo");
|
||||
|
|
Loading…
Reference in a new issue