mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
parent
142ff73450
commit
801768386b
30
src/effects.js
vendored
30
src/effects.js
vendored
@ -7,20 +7,38 @@ var fxNow, timerId,
|
|||||||
animationPrefilters = [ defaultPrefilter ],
|
animationPrefilters = [ defaultPrefilter ],
|
||||||
tweeners = {
|
tweeners = {
|
||||||
"*": [function( prop, value ) {
|
"*": [function( prop, value ) {
|
||||||
var end, unit,
|
var end, unit, prevScale,
|
||||||
tween = this.createTween( prop, value ),
|
tween = this.createTween( prop, value ),
|
||||||
parts = rfxnum.exec( value ),
|
parts = rfxnum.exec( value ),
|
||||||
start = tween.cur();
|
start = tween.cur(),
|
||||||
|
scale = 1,
|
||||||
|
target = start;
|
||||||
|
|
||||||
if ( parts ) {
|
if ( parts ) {
|
||||||
end = +parts[2];
|
end = +parts[2];
|
||||||
unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
|
unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
|
||||||
|
|
||||||
// We need to compute starting value
|
// We need to compute starting value
|
||||||
if ( unit !== "px" ) {
|
if ( unit !== "px" && start ) {
|
||||||
jQuery.style( this, prop, (end || 1) + unit);
|
// Iteratively approximate from a nonzero starting point
|
||||||
start = start * (end || 1) / tween.cur() || 0;
|
// Prefer the current property, because this process will be trivial if it uses the same units
|
||||||
jQuery.style( this, prop, start + unit);
|
// Fallback to end or a simple constant
|
||||||
|
start = parseFloat( jQuery.style( tween.elem, prop ) ) || end || 1;
|
||||||
|
|
||||||
|
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";
|
||||||
|
|
||||||
|
// 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 scale is unchanged or we've hit the mark
|
||||||
|
} while ( scale !== 1 && scale !== prevScale );
|
||||||
}
|
}
|
||||||
|
|
||||||
tween.unit = unit;
|
tween.unit = unit;
|
||||||
|
18
test/unit/effects.js
vendored
18
test/unit/effects.js
vendored
@ -1628,4 +1628,22 @@ asyncTest( "multiple unqueued and promise", 4, function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
asyncTest( "animate does not change start value for non-px animation (#7109)", 1, function() {
|
||||||
|
var parent = jQuery( "<div><div></div></div>" ).css({ width: 284, height: 1 }).appendTo( "#qunit-fixture" ),
|
||||||
|
child = parent.children().css({ fontSize: "98.6in", width: "0.01em", height: 1 }),
|
||||||
|
actual = parseFloat( child.css( "width" ) ),
|
||||||
|
computed = [];
|
||||||
|
|
||||||
|
child.animate({ width: "0%" }, {
|
||||||
|
duration: 1,
|
||||||
|
step: function() {
|
||||||
|
computed.push( parseFloat( child.css( "width" ) ) );
|
||||||
|
}
|
||||||
|
}).queue( function( next ) {
|
||||||
|
equal( computed[0], actual, "Starting width was unchanged" );
|
||||||
|
next();
|
||||||
|
start();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
} // if ( jQuery.fx )
|
} // if ( jQuery.fx )
|
||||||
|
Loading…
Reference in New Issue
Block a user