aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorey Frang <gnarf@gnarf.net>2012-11-07 19:22:14 -0600
committerCorey Frang <gnarf@gnarf.net>2012-11-07 19:22:14 -0600
commit781a5c0b78a029b079aae970200d3e4edf543349 (patch)
tree509a5bc149895d8172d57cd6c3e18f84da1837bb
parent6b14cef7a85d22d979266a754b2a279ecd636b24 (diff)
downloadjquery-781a5c0b78a029b079aae970200d3e4edf543349.tar.gz
jquery-781a5c0b78a029b079aae970200d3e4edf543349.zip
Ensure each tick gets it's own fxNow - Fixes #12837 - Thanks @chadparry
Closes gh-1022 Closes gh-1021
-rw-r--r--src/effects.js3
-rw-r--r--test/unit/effects.js29
2 files changed, 32 insertions, 0 deletions
diff --git a/src/effects.js b/src/effects.js
index 7627e3a23..3c10892a0 100644
--- a/src/effects.js
+++ b/src/effects.js
@@ -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 ) {
diff --git a/test/unit/effects.js b/test/unit/effects.js
index b4ba10ba4..519578f82 100644
--- a/test/unit/effects.js
+++ b/test/unit/effects.js
@@ -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" );