mirror of
https://github.com/jquery/jquery-ui.git
synced 2024-11-21 11:04:24 +00:00
37dcc3e21d
For instance, this is useful for the jquery-ui-rails gem, which does not use jQuery UI's own minification, but relies on Rails to minify the files where necessary. Rails in turn uses UglifyJS for JS and YUI for CSS, both of which respect the /*! ... */ convention.
113 lines
2.7 KiB
JavaScript
113 lines
2.7 KiB
JavaScript
/*!
|
|
* jQuery UI Effects Bounce @VERSION
|
|
*
|
|
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
* http://jquery.org/license
|
|
*
|
|
* http://docs.jquery.com/UI/Effects/Bounce
|
|
*
|
|
* Depends:
|
|
* jquery.effects.core.js
|
|
*/
|
|
(function( $, undefined ) {
|
|
|
|
$.effects.effect.bounce = function( o, done ) {
|
|
var el = $( this ),
|
|
props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
|
|
|
|
// defaults:
|
|
mode = $.effects.setMode( el, o.mode || "effect" ),
|
|
hide = mode === "hide",
|
|
show = mode === "show",
|
|
direction = o.direction || "up",
|
|
distance = o.distance,
|
|
times = o.times || 5,
|
|
|
|
// number of internal animations
|
|
anims = times * 2 + ( show || hide ? 1 : 0 ),
|
|
speed = o.duration / anims,
|
|
easing = o.easing,
|
|
|
|
// utility:
|
|
ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
|
|
motion = ( direction === "up" || direction === "left" ),
|
|
i,
|
|
upAnim,
|
|
downAnim,
|
|
|
|
// we will need to re-assemble the queue to stack our animations in place
|
|
queue = el.queue(),
|
|
queuelen = queue.length;
|
|
|
|
// Avoid touching opacity to prevent clearType and PNG issues in IE
|
|
if ( show || hide ) {
|
|
props.push( "opacity" );
|
|
}
|
|
|
|
$.effects.save( el, props );
|
|
el.show();
|
|
$.effects.createWrapper( el ); // Create Wrapper
|
|
|
|
// default distance for the BIGGEST bounce is the outer Distance / 3
|
|
if ( !distance ) {
|
|
distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
|
|
}
|
|
|
|
if ( show ) {
|
|
downAnim = { opacity: 1 };
|
|
downAnim[ ref ] = 0;
|
|
|
|
// if we are showing, force opacity 0 and set the initial position
|
|
// then do the "first" animation
|
|
el.css( "opacity", 0 )
|
|
.css( ref, motion ? -distance * 2 : distance * 2 )
|
|
.animate( downAnim, speed, easing );
|
|
}
|
|
|
|
// start at the smallest distance if we are hiding
|
|
if ( hide ) {
|
|
distance = distance / Math.pow( 2, times - 1 );
|
|
}
|
|
|
|
downAnim = {};
|
|
downAnim[ ref ] = 0;
|
|
// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
|
|
for ( i = 0; i < times; i++ ) {
|
|
upAnim = {};
|
|
upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
|
|
|
|
el.animate( upAnim, speed, easing )
|
|
.animate( downAnim, speed, easing );
|
|
|
|
distance = hide ? distance * 2 : distance / 2;
|
|
}
|
|
|
|
// Last Bounce when Hiding
|
|
if ( hide ) {
|
|
upAnim = { opacity: 0 };
|
|
upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
|
|
|
|
el.animate( upAnim, speed, easing );
|
|
}
|
|
|
|
el.queue(function() {
|
|
if ( hide ) {
|
|
el.hide();
|
|
}
|
|
$.effects.restore( el, props );
|
|
$.effects.removeWrapper( el );
|
|
done();
|
|
});
|
|
|
|
// inject all the animations we just queued to be first in line (after "inprogress")
|
|
if ( queuelen > 1) {
|
|
queue.splice.apply( queue,
|
|
[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
|
|
}
|
|
el.dequeue();
|
|
|
|
};
|
|
|
|
})(jQuery);
|