1/*!
2 * jQuery UI Effects Shake 1.13.3
3 * https://jqueryui.com
4 *
5 * Copyright OpenJS Foundation and other contributors
6 * Released under the MIT license.
7 * https://jquery.org/license
8 */
9
10//>>label: Shake Effect
11//>>group: Effects
12//>>description: Shakes an element horizontally or vertically n times.
13//>>docs: https://api.jqueryui.com/shake-effect/
14//>>demos: https://jqueryui.com/effect/
15
16( function( factory ) {
17 "use strict";
18
19 if ( typeof define === "function" && define.amd ) {
20
21 // AMD. Register as an anonymous module.
22 define( [
23 "jquery",
24 "../version",
25 "../effect"
26 ], factory );
27 } else {
28
29 // Browser globals
30 factory( jQuery );
31 }
32} )( function( $ ) {
33"use strict";
34
35return $.effects.define( "shake", function( options, done ) {
36
37 var i = 1,
38 element = $( this ),
39 direction = options.direction || "left",
40 distance = options.distance || 20,
41 times = options.times || 3,
42 anims = times * 2 + 1,
43 speed = Math.round( options.duration / anims ),
44 ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
45 positiveMotion = ( direction === "up" || direction === "left" ),
46 animation = {},
47 animation1 = {},
48 animation2 = {},
49
50 queuelen = element.queue().length;
51
52 $.effects.createPlaceholder( element );
53
54 // Animation
55 animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
56 animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
57 animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
58
59 // Animate
60 element.animate( animation, speed, options.easing );
61
62 // Shakes
63 for ( ; i < times; i++ ) {
64 element
65 .animate( animation1, speed, options.easing )
66 .animate( animation2, speed, options.easing );
67 }
68
69 element
70 .animate( animation1, speed, options.easing )
71 .animate( animation, speed / 2, options.easing )
72 .queue( done );
73
74 $.effects.unshift( element, queuelen, anims + 1 );
75} );
76
77} );
78