mirror of
https://github.com/jquery/jquery-ui.git
synced 2025-01-07 20:34:24 +00:00
Effects.scale: Update the position of the element post animation to avoid jumping - Fixed #4316 - Element jumps to wrong position after scale effect with origin: ['middle','center'] parameter
This commit is contained in:
parent
b0182d7822
commit
c1f71f1c2f
47
ui/jquery.effects.scale.js
vendored
47
ui/jquery.effects.scale.js
vendored
@ -118,8 +118,11 @@ $.effects.effect.size = function( o ) {
|
|||||||
mode = $.effects.setMode( el, o.mode || 'effect' ),
|
mode = $.effects.setMode( el, o.mode || 'effect' ),
|
||||||
restore = o.restore || mode !== "effect",
|
restore = o.restore || mode !== "effect",
|
||||||
scale = o.scale || 'both',
|
scale = o.scale || 'both',
|
||||||
origin = o.origin,
|
origin = o.origin || [ "middle", "center" ],
|
||||||
original, baseline, factor;
|
original, baseline, factor,
|
||||||
|
position = el.css( "position" ),
|
||||||
|
originalVerticalPositioning = el.css( "bottom" ) !== "auto" ? "bottom" : "top";
|
||||||
|
originalHorizontalPositioning = el.css( "right" ) !== "auto" ? "right" : "left";
|
||||||
|
|
||||||
if ( mode === "show" ) {
|
if ( mode === "show" ) {
|
||||||
el.show();
|
el.show();
|
||||||
@ -250,6 +253,46 @@ $.effects.effect.size = function( o ) {
|
|||||||
el.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 );
|
$.effects.removeWrapper( el );
|
||||||
$.isFunction( o.complete ) && o.complete.apply( this, arguments ); // Callback
|
$.isFunction( o.complete ) && o.complete.apply( this, arguments ); // Callback
|
||||||
el.dequeue();
|
el.dequeue();
|
||||||
|
Loading…
Reference in New Issue
Block a user