]> source.dussan.org Git - jquery.git/commitdiff
Fix #13939: Same-unit relative animations
authorRichard Gibson <richard.gibson@gmail.com>
Sun, 26 May 2013 20:02:32 +0000 (16:02 -0400)
committerRichard Gibson <richard.gibson@gmail.com>
Sun, 26 May 2013 23:53:58 +0000 (19:53 -0400)
(cherry picked from commit 00231d5d94d3374d53bfe79e04ba253250c73087)

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

index 78f36827aa4cb0f507e18080bb39b7ee68cad8f6..cb78b5cfe577a2c4b695b50b7c6e5e2bf29e0f57 100644 (file)
@@ -42,8 +42,8 @@ var fxNow, timerId,
 
                        // Update tween properties
                        if ( parts ) {
+                               start = tween.start = +start || +target || 0;
                                tween.unit = unit;
-                               tween.start = +start || +target || 0;
                                // If a +=/-= token was provided, we're doing a relative animation
                                tween.end = parts[ 1 ] ?
                                        start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
index d59ff84a6dc369af28c5b1fbf0447e63e090828d..05f1c017a379e60924a7c2d0b1fc01f6e6f5bc91 100644 (file)
@@ -204,6 +204,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() {
        expect(1);
        stop();