]> source.dussan.org Git - jquery.git/commitdiff
Fix #14318: Cherry-pick interrupted animation fix from master ea5c22ec12e6a548b1ec2d7...
authorRichard Gibson <richard.gibson@gmail.com>
Fri, 30 Aug 2013 16:38:43 +0000 (12:38 -0400)
committerRichard Gibson <richard.gibson@gmail.com>
Fri, 30 Aug 2013 16:38:43 +0000 (12:38 -0400)
src/effects.js
test/unit/effects.js

index b936019fa5ff7a4bfd5e462c198dd8dd691cce19..e708cb32b4413098763cf8df88ff04639f2718ee 100644 (file)
@@ -337,7 +337,13 @@ function defaultPrefilter( elem, props, opts ) {
                        delete props[ prop ];
                        toggle = toggle || value === "toggle";
                        if ( value === ( hidden ? "hide" : "show" ) ) {
-                               continue;
+
+                               // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
+                               if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+                                       hidden = true;
+                               } else {
+                                       continue;
+                               }
                        }
                        orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
                }
index ea8d93f5ab214df88755f50ed135d7b711802f80..ac0e8a66d128ef68e804dad6469c662612561518 100644 (file)
@@ -2192,7 +2192,8 @@ asyncTest( ".finish() is applied correctly when multiple elements were animated
 });
 
 asyncTest( "slideDown() after stop() (#13483)", 2, function() {
-       var ul = jQuery( "<ul style='height: 100px;display: block'></ul>" ),
+       var ul = jQuery( "<ul style='height: 100px; display: block;'></ul>" )
+                       .appendTo("#qunit-fixture"),
                origHeight = ul.height();
 
        // First test. slideUp() -> stop() in the middle -> slideDown() until the end
@@ -2221,24 +2222,28 @@ asyncTest( "slideDown() after stop() (#13483)", 2, function() {
        }, 500 );
 });
 
-asyncTest( "fadeIn() after stop() (related to #13483)", 2, function() {
-       var ul = jQuery( "<ul style='height: 100px;display: block; opacity: 1'></ul>" ),
+asyncTest( "fadeIn() after stop() (related to #13483)", 5, function() {
+       var ul = jQuery( "<ul style='height: 100px; display: block;'></ul>" )
+                       .appendTo("#qunit-fixture").css( "opacity", 1 ),
                origOpacity = ul.css( "opacity" );
 
        // First test. fadeOut() -> stop() in the middle -> fadeIn() until the end
-       ul.fadeOut( 1000 );
+       ul.fadeOut( 2000 );
        setTimeout( function() {
                ul.stop( true );
+               ok( ul.css( "opacity" ) > 0, "fadeOut() interrupted" );
                ul.fadeIn( 1, function() {
-                       equal( ul.css( "opacity" ), origOpacity, "fadeIn() after interrupting fadeOut() with stop(). Opacity must be in original value" );
+                       equal( ul.css( "opacity" ), origOpacity, "fadeIn() restored original opacity after interrupted fadeOut()" );
 
                        // Second test. fadeIn() -> stop() in the middle -> fadeIn() until the end
                        ul.fadeOut( 1, function() {
-                               ul.fadeIn( 1000 );
+                               equal( ul.css( "opacity" ), origOpacity, "fadeOut() completed" );
+                               ul.fadeIn( 2000 );
                                setTimeout( function() {
                                        ul.stop( true );
+                                       ok( ul.css( "opacity" ) < origOpacity, "fadeIn() interrupted" );
                                        ul.fadeIn( 1, function() {
-                                               equal( ul.css("opacity"), origOpacity, "fadeIn() after interrupting fadeIn() with stop(). Opacity must be in original value" );
+                                               equal( ul.css("opacity"), origOpacity, "fadeIn() restored original opacity after interrupted fadeIn()" );
 
                                                // Cleanup
                                                ul.remove();