Class Animation: Use .attr( "class" ) instead of .attr( "className" ) and adjust the queueing logic for jQuery 1.6 compatibility. Fixes #7275 - $.effects.animateClass broken in jQuery 1.6."

This commit is contained in:
Scott González 2011-04-27 10:42:21 -04:00
parent cd61fb1b55
commit 60d4e0ae42

View File

@ -234,12 +234,12 @@ $.effects.animateClass = function( value, duration, easing, callback ) {
easing = null; easing = null;
} }
return this.queue( 'fx', function() { return this.queue(function() {
var that = $( this ), var that = $( this ),
originalStyleAttr = that.attr( 'style' ) || ' ', originalStyleAttr = that.attr( 'style' ) || ' ',
originalStyle = filterStyles( getElementStyles.call( this ) ), originalStyle = filterStyles( getElementStyles.call( this ) ),
newStyle, newStyle,
className = that.attr( 'className' ); className = that.attr( 'class' );
$.each( classAnimationActions, function(i, action) { $.each( classAnimationActions, function(i, action) {
if ( value[ action ] ) { if ( value[ action ] ) {
@ -247,32 +247,31 @@ $.effects.animateClass = function( value, duration, easing, callback ) {
} }
}); });
newStyle = filterStyles( getElementStyles.call( this ) ); newStyle = filterStyles( getElementStyles.call( this ) );
that.attr( 'className', className ); that.attr( 'class', className );
that.animate( styleDifference( originalStyle, newStyle ), duration, easing, function() { that.animate( styleDifference( originalStyle, newStyle ), {
$.each( classAnimationActions, function( i, action ) { queue: false,
if ( value[ action ] ) { duration: duration,
that[ action + 'Class' ]( value[ action ] ); easing: easing,
complete: 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 ) {
// work around bug in IE by clearing the cssText before setting it callback.apply( this, arguments );
if ( typeof that.attr( 'style' ) == 'object' ) { }
that.attr( 'style' ).cssText = ''; $.dequeue( this );
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 );
}); });
}; };