Spaces:
Sleeping
Sleeping
/*! | |
* jQuery UI Effects Bounce 1.13.3 | |
* https://jqueryui.com | |
* | |
* Copyright OpenJS Foundation and other contributors | |
* Released under the MIT license. | |
* https://jquery.org/license | |
*/ | |
//>>label: Bounce Effect | |
//>>group: Effects | |
//>>description: Bounces an element horizontally or vertically n times. | |
//>>docs: https://api.jqueryui.com/bounce-effect/ | |
//>>demos: https://jqueryui.com/effect/ | |
( function( factory ) { | |
"use strict"; | |
if ( typeof define === "function" && define.amd ) { | |
// AMD. Register as an anonymous module. | |
define( [ | |
"jquery", | |
"../version", | |
"../effect" | |
], factory ); | |
} else { | |
// Browser globals | |
factory( jQuery ); | |
} | |
} )( function( $ ) { | |
; | |
return $.effects.define( "bounce", function( options, done ) { | |
var upAnim, downAnim, refValue, | |
element = $( this ), | |
// Defaults: | |
mode = options.mode, | |
hide = mode === "hide", | |
show = mode === "show", | |
direction = options.direction || "up", | |
distance = options.distance, | |
times = options.times || 5, | |
// Number of internal animations | |
anims = times * 2 + ( show || hide ? 1 : 0 ), | |
speed = options.duration / anims, | |
easing = options.easing, | |
// Utility: | |
ref = ( direction === "up" || direction === "down" ) ? "top" : "left", | |
motion = ( direction === "up" || direction === "left" ), | |
i = 0, | |
queuelen = element.queue().length; | |
$.effects.createPlaceholder( element ); | |
refValue = element.css( ref ); | |
// Default distance for the BIGGEST bounce is the outer Distance / 3 | |
if ( !distance ) { | |
distance = element[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3; | |
} | |
if ( show ) { | |
downAnim = { opacity: 1 }; | |
downAnim[ ref ] = refValue; | |
// If we are showing, force opacity 0 and set the initial position | |
// then do the "first" animation | |
element | |
.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 ] = refValue; | |
// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here | |
for ( ; i < times; i++ ) { | |
upAnim = {}; | |
upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; | |
element | |
.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; | |
element.animate( upAnim, speed, easing ); | |
} | |
element.queue( done ); | |
$.effects.unshift( element, queuelen, anims + 1 ); | |
} ); | |
} ); | |