]> source.dussan.org Git - jquery-ui.git/commitdiff
Core: Fixed switchClass queueing issues using lazy evaluation of element's style...
authorAlex Dovenmuehle <adovenmuehle@gmail.com>
Fri, 19 Nov 2010 13:54:11 +0000 (08:54 -0500)
committerScott González <scott.gonzalez@gmail.com>
Fri, 19 Nov 2010 13:54:11 +0000 (08:54 -0500)
ui/jquery.effects.core.js

index 111cb6f84fa8589f719156754f2fd3e48a53ea6d..9be70412877a94c888d1bf542fd786dc199b2009 100644 (file)
@@ -232,33 +232,41 @@ $.effects.animateClass = function(value, duration, easing, callback) {
        }
 
        return this.each(function() {
+               $.queue(this, 'fx', function() {
+                       var that = $(this),
+                               originalStyleAttr = that.attr('style') || ' ',
+                               originalStyle = filterStyles(getElementStyles.call(this)),
+                               newStyle,
+                               className = that.attr('className');
 
-               var that = $(this),
-                       originalStyleAttr = that.attr('style') || ' ',
-                       originalStyle = filterStyles(getElementStyles.call(this)),
-                       newStyle,
-                       className = that.attr('className');
-
-               $.each(classAnimationActions, function(i, action) {
-                       if (value[action]) {
-                               that[action + 'Class'](value[action]);
-                       }
-               });
-               newStyle = filterStyles(getElementStyles.call(this));
-               that.attr('className', className);
-
-               that.animate(styleDifference(originalStyle, newStyle), duration, easing, function() {
                        $.each(classAnimationActions, function(i, action) {
-                               if (value[action]) { that[action + 'Class'](value[action]); }
+                               if (value[action]) {
+                                       that[action + 'Class'](value[action]);
+                               }
                        });
-                       // work around bug in IE by clearing the cssText before setting it
-                       if (typeof that.attr('style') == 'object') {
-                               that.attr('style').cssText = '';
-                               that.attr('style').cssText = originalStyleAttr;
-                       } else {
-                               that.attr('style', originalStyleAttr);
-                       }
-                       if (callback) { callback.apply(this, arguments); }
+                       newStyle = filterStyles(getElementStyles.call(this));
+                       that.attr('className', className);
+
+                       that.animate(styleDifference(originalStyle, newStyle), duration, easing, function() {
+                               $.each(classAnimationActions, function(i, action) {
+                                       if (value[action]) { that[action + 'Class'](value[action]); }
+                               });
+                               // work around bug in IE by clearing the cssText before setting it
+                               if (typeof that.attr('style') == 'object') {
+                                       that.attr('style').cssText = '';
+                                       that.attr('style').cssText = originalStyleAttr;
+                               } else {
+                                       that.attr('style', originalStyleAttr);
+                               }
+                               if (callback) { callback.apply(this, arguments); }
+                       });
+
+                       // $.animate adds a function to the end of the queue
+                       // but we want it at the front
+                       var queue = $.queue(this),
+                               anim = queue.splice(queue.length - 1, 1)[0];
+                       queue.splice(1, 0, anim);
+                       $.dequeue(this);
                });
        });
 };