Skip to content

Commit

Permalink
Effects.scale: Update the position of the element post animation to a…
Browse files Browse the repository at this point in the history
…void jumping - Fixed #4316 - Element jumps to wrong position after scale effect with origin: ['middle','center'] parameter
  • Loading branch information
gnarf committed Jun 14, 2011
1 parent b0182d7 commit c1f71f1
Showing 1 changed file with 46 additions and 3 deletions.
49 changes: 46 additions & 3 deletions ui/jquery.effects.scale.js
Expand Up @@ -118,8 +118,11 @@ $.effects.effect.size = function( o ) {
mode = $.effects.setMode( el, o.mode || 'effect' ),
restore = o.restore || mode !== "effect",
scale = o.scale || 'both',
origin = o.origin,
original, baseline, factor;
origin = o.origin || [ "middle", "center" ],
original, baseline, factor,
position = el.css( "position" ),
originalVerticalPositioning = el.css( "bottom" ) !== "auto" ? "bottom" : "top";
originalHorizontalPositioning = el.css( "right" ) !== "auto" ? "right" : "left";

if ( mode === "show" ) {
el.show();
Expand Down Expand Up @@ -249,7 +252,47 @@ $.effects.effect.size = function( o ) {
if( mode == 'hide' ) {
el.hide();
}
$.effects.restore( el, restore ? props : props1 );
$.effects.restore( el, restore ? props : props1 );

// we need to recalculate our positioning based on the new scaling
if ( position === "static" ) {
el.css({
position: "relative",
top: el.to.top,
left: el.to.left
});
} else {
$.each([ originalVerticalPositioning, originalHorizontalPositioning ], function( idx, pos ) {
el.css( pos, function( _, str ) {
var val = parseInt( str, 10 ),
toRef = idx ? el.to.left : el.to.top,
delta = idx ? el.to.outerWidth - el.from.outerWidth: el.to.outerHeight - el.from.outerHeight,
same = origin[ idx ] === pos,
mid = origin[ idx ] === "middle" || origin[ idx ] === "center",
direction = pos == "left" || pos == "top";

// if original was "auto", recalculate the new value from wrapper
if ( str === "auto" ) {
return toRef + "px";
}

// if not setting left or top
if ( !direction ) {

// if the position is relative, bottom/right are reversed meaning
if ( position === "relative" ) {
toRef *= -1;

// otherwise, if its NOT a midpoint origin, compensate for the outerWidth difference
} else if ( !mid ) {
toRef -= delta * ( same ? -1 : 1 );
}
}
return val + toRef + "px";
});
});
}

$.effects.removeWrapper( el );
$.isFunction( o.complete ) && o.complete.apply( this, arguments ); // Callback
el.dequeue();
Expand Down

0 comments on commit c1f71f1

Please sign in to comment.