aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/effects.js10
-rw-r--r--test/unit/effects.js27
2 files changed, 35 insertions, 2 deletions
diff --git a/src/effects.js b/src/effects.js
index bfe282aa5..d5ff7464c 100644
--- a/src/effects.js
+++ b/src/effects.js
@@ -640,13 +640,19 @@ jQuery.fx.tick = function() {
};
jQuery.fx.timer = function( timer ) {
- if ( timer() && jQuery.timers.push( timer ) && !timerId ) {
- timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+ if ( timer() && jQuery.timers.push( timer ) ) {
+ jQuery.fx.start();
}
};
jQuery.fx.interval = 13;
+jQuery.fx.start = function() {
+ if ( !timerId ) {
+ timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+ }
+};
+
jQuery.fx.stop = function() {
clearInterval( timerId );
timerId = null;
diff --git a/test/unit/effects.js b/test/unit/effects.js
index af2eddc4e..b615dfd6d 100644
--- a/test/unit/effects.js
+++ b/test/unit/effects.js
@@ -1877,4 +1877,31 @@ jQuery.map([ "toggle", "slideToggle", "fadeToggle" ], function ( method ) {
});
});
+test( "jQuery.fx.start & jQuery.fx.stop hook points", function() {
+ var oldStart = jQuery.fx.start,
+ oldStop = jQuery.fx.stop,
+ foo = jQuery({ foo: 0 });
+
+ expect( 3 );
+
+ jQuery.fx.start = function() {
+ ok( true, "start called" );
+ };
+ jQuery.fx.stop = function() {
+ ok( true, "stop called" );
+ };
+
+ // calls start
+ foo.animate({ foo: 1 }, { queue: false });
+ // calls start
+ foo.animate({ foo: 2 }, { queue: false });
+ foo.stop();
+ // calls stop
+ jQuery.fx.tick();
+
+ // cleanup
+ jQuery.fx.start = oldStart;
+ jQuery.fx.stop = oldStop;
+});
+
} // if ( jQuery.fx )