From: Richard Gibson Date: Sat, 15 Sep 2012 15:57:01 +0000 (-0400) Subject: Fix #12447: Ensure starting-point calc takes finite time. Close gh-922. X-Git-Tag: 1.8.2~18 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=e755c194161e1dc6793cbb690ba8334dad560c8f;p=jquery.git Fix #12447: Ensure starting-point calc takes finite time. Close gh-922. --- diff --git a/src/effects.js b/src/effects.js index 8752838fb..3118da407 100644 --- a/src/effects.js +++ b/src/effects.js @@ -5,12 +5,13 @@ var fxNow, timerId, animationPrefilters = [ defaultPrefilter ], tweeners = { "*": [function( prop, value ) { - var end, unit, prevScale, + var end, unit, tween = this.createTween( prop, value ), parts = rfxnum.exec( value ), target = tween.cur(), start = +target || 0, - scale = 1; + scale = 1, + maxIterations = 20; if ( parts ) { end = +parts[2]; @@ -26,17 +27,15 @@ var fxNow, timerId, do { // If previous iteration zeroed out, double until we get *something* // Use a string for doubling factor so we don't accidentally see scale as unchanged below - prevScale = scale = scale || ".5"; + scale = scale || ".5"; // Adjust and apply start = start / scale; jQuery.style( tween.elem, prop, start + unit ); - // Update scale, tolerating zeroes from tween.cur() - scale = tween.cur() / target; - - // Stop looping if we've hit the mark or scale is unchanged - } while ( scale !== 1 && scale !== prevScale ); + // Update scale, tolerating zero or NaN from tween.cur() + // And breaking the loop if scale is unchanged or perfect, or if we've just had enough + } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); } tween.unit = unit;