]> source.dussan.org Git - jquery.git/commitdiff
Ensure each tick gets it's own fxNow - Fixes #12837 - Thanks @chadparry
authorCorey Frang <gnarf@gnarf.net>
Thu, 8 Nov 2012 01:22:14 +0000 (19:22 -0600)
committerCorey Frang <gnarf@gnarf.net>
Thu, 8 Nov 2012 01:22:14 +0000 (19:22 -0600)
Closes gh-1022
Closes gh-1021

src/effects.js
test/unit/effects.js

index 7627e3a23be7e7e5a8f828f54fb5ad88c2d6a7bd..3c10892a0b7747775acd92bc63ca1870f5a4d6ed 100644 (file)
@@ -612,6 +612,8 @@ jQuery.fx.tick = function() {
                timers = jQuery.timers,
                i = 0;
 
+       fxNow = jQuery.now();
+
        for ( ; i < timers.length; i++ ) {
                timer = timers[ i ];
                // Checks the timer has not already been removed
@@ -623,6 +625,7 @@ jQuery.fx.tick = function() {
        if ( !timers.length ) {
                jQuery.fx.stop();
        }
+       fxNow = undefined;
 };
 
 jQuery.fx.timer = function( timer ) {
index b4ba10ba4af4f4b90ec3283ee932b94618f5de9f..519578f8221b34d643682d574c59e273fe3f334e 100644 (file)
@@ -1818,6 +1818,35 @@ test( "Animate properly sets overflow hidden when animating width/height (#12117
        });
 });
 
+test( "Each tick of the timer loop uses a fresh time (#12837)", function() {
+       var lastVal, current,
+               tmp = jQuery({
+                       test: 0
+               });
+       expect( 3 );
+       tmp.animate({
+               test: 100
+       }, {
+               step: function( p, fx ) {
+                       ok( fx.now !== lastVal, "Current value is not the last value: " + lastVal + " - " + fx.now );
+                       lastVal = fx.now;
+               }
+       });
+       current = jQuery.now();
+       // intentionally empty, we want to spin wheels until the time changes.
+       while ( current === jQuery.now() ) { }
+
+       // now that we have a new time, run another tick
+       jQuery.fx.tick();
+
+       current = jQuery.now();
+       // intentionally empty, we want to spin wheels until the time changes.
+       while ( current === jQuery.now() ) { }
+
+       jQuery.fx.tick();
+       tmp.stop();
+});
+
 test( "Animations with 0 duration don't ease (#12273)", 1, function() {
        jQuery.easing.test = function() {
                ok( false, "Called easing" );