mirror of
https://github.com/jquery/jquery.git
synced 2025-01-10 18:24:24 +00:00
Fix #13939: Same-unit relative animations
This commit is contained in:
parent
28db00fb6f
commit
00231d5d94
2
src/effects.js
vendored
2
src/effects.js
vendored
@ -42,8 +42,8 @@ var fxNow, timerId,
|
|||||||
|
|
||||||
// Update tween properties
|
// Update tween properties
|
||||||
if ( parts ) {
|
if ( parts ) {
|
||||||
|
start = tween.start = +start || +target || 0;
|
||||||
tween.unit = unit;
|
tween.unit = unit;
|
||||||
tween.start = +start || +target || 0;
|
|
||||||
// If a +=/-= token was provided, we're doing a relative animation
|
// If a +=/-= token was provided, we're doing a relative animation
|
||||||
tween.end = parts[ 1 ] ?
|
tween.end = parts[ 1 ] ?
|
||||||
start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
|
start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
|
||||||
|
40
test/unit/effects.js
vendored
40
test/unit/effects.js
vendored
@ -208,6 +208,46 @@ test("animate(Hash, Object, Function)", function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("animate relative values", function() {
|
||||||
|
stop();
|
||||||
|
|
||||||
|
var value = 40,
|
||||||
|
bases = [ "%", "px", "em" ],
|
||||||
|
adjustments = [ "px", "em" ],
|
||||||
|
container = jQuery("<div></div>")
|
||||||
|
.css({ position: "absolute", height: "50em", width: "50em" }),
|
||||||
|
animations = bases.length * adjustments.length;
|
||||||
|
|
||||||
|
expect( 2 * animations );
|
||||||
|
|
||||||
|
jQuery.each( bases, function( _, baseUnit ) {
|
||||||
|
jQuery.each( adjustments, function( _, adjustUnit ) {
|
||||||
|
var base = value + baseUnit,
|
||||||
|
adjust = { height: "+=2" + adjustUnit, width: "-=2" + adjustUnit },
|
||||||
|
elem = jQuery("<div></div>")
|
||||||
|
.appendTo( container.clone().appendTo("#qunit-fixture") )
|
||||||
|
.css({
|
||||||
|
position: "absolute",
|
||||||
|
height: base,
|
||||||
|
width: value + adjustUnit
|
||||||
|
}),
|
||||||
|
baseScale = elem[ 0 ].offsetHeight / value,
|
||||||
|
adjustScale = elem[ 0 ].offsetWidth / value;
|
||||||
|
|
||||||
|
elem.css( "width", base ).animate( adjust, 100, function() {
|
||||||
|
equal( this.offsetHeight, value * baseScale + 2 * adjustScale,
|
||||||
|
baseUnit + "+=" + adjustUnit );
|
||||||
|
equal( this.offsetWidth, value * baseScale - 2 * adjustScale,
|
||||||
|
baseUnit + "-=" + adjustUnit );
|
||||||
|
|
||||||
|
if ( --animations === 0 ) {
|
||||||
|
start();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
test("animate negative height", function() {
|
test("animate negative height", function() {
|
||||||
expect(1);
|
expect(1);
|
||||||
stop();
|
stop();
|
||||||
|
Loading…
Reference in New Issue
Block a user