7
|
1 /*!
|
|
2 * jQuery UI Effects Explode 1.10.4
|
|
3 * http://jqueryui.com
|
|
4 *
|
|
5 * Copyright 2014 jQuery Foundation and other contributors
|
|
6 * Released under the MIT license.
|
|
7 * http://jquery.org/license
|
|
8 *
|
|
9 * http://api.jqueryui.com/explode-effect/
|
|
10 *
|
|
11 * Depends:
|
|
12 * jquery.ui.effect.js
|
|
13 */
|
|
14 (function( $, undefined ) {
|
|
15
|
|
16 $.effects.effect.explode = function( o, done ) {
|
|
17
|
|
18 var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
|
|
19 cells = rows,
|
|
20 el = $( this ),
|
|
21 mode = $.effects.setMode( el, o.mode || "hide" ),
|
|
22 show = mode === "show",
|
|
23
|
|
24 // show and then visibility:hidden the element before calculating offset
|
|
25 offset = el.show().css( "visibility", "hidden" ).offset(),
|
|
26
|
|
27 // width and height of a piece
|
|
28 width = Math.ceil( el.outerWidth() / cells ),
|
|
29 height = Math.ceil( el.outerHeight() / rows ),
|
|
30 pieces = [],
|
|
31
|
|
32 // loop
|
|
33 i, j, left, top, mx, my;
|
|
34
|
|
35 // children animate complete:
|
|
36 function childComplete() {
|
|
37 pieces.push( this );
|
|
38 if ( pieces.length === rows * cells ) {
|
|
39 animComplete();
|
|
40 }
|
|
41 }
|
|
42
|
|
43 // clone the element for each row and cell.
|
|
44 for( i = 0; i < rows ; i++ ) { // ===>
|
|
45 top = offset.top + i * height;
|
|
46 my = i - ( rows - 1 ) / 2 ;
|
|
47
|
|
48 for( j = 0; j < cells ; j++ ) { // |||
|
|
49 left = offset.left + j * width;
|
|
50 mx = j - ( cells - 1 ) / 2 ;
|
|
51
|
|
52 // Create a clone of the now hidden main element that will be absolute positioned
|
|
53 // within a wrapper div off the -left and -top equal to size of our pieces
|
|
54 el
|
|
55 .clone()
|
|
56 .appendTo( "body" )
|
|
57 .wrap( "<div></div>" )
|
|
58 .css({
|
|
59 position: "absolute",
|
|
60 visibility: "visible",
|
|
61 left: -j * width,
|
|
62 top: -i * height
|
|
63 })
|
|
64
|
|
65 // select the wrapper - make it overflow: hidden and absolute positioned based on
|
|
66 // where the original was located +left and +top equal to the size of pieces
|
|
67 .parent()
|
|
68 .addClass( "ui-effects-explode" )
|
|
69 .css({
|
|
70 position: "absolute",
|
|
71 overflow: "hidden",
|
|
72 width: width,
|
|
73 height: height,
|
|
74 left: left + ( show ? mx * width : 0 ),
|
|
75 top: top + ( show ? my * height : 0 ),
|
|
76 opacity: show ? 0 : 1
|
|
77 }).animate({
|
|
78 left: left + ( show ? 0 : mx * width ),
|
|
79 top: top + ( show ? 0 : my * height ),
|
|
80 opacity: show ? 1 : 0
|
|
81 }, o.duration || 500, o.easing, childComplete );
|
|
82 }
|
|
83 }
|
|
84
|
|
85 function animComplete() {
|
|
86 el.css({
|
|
87 visibility: "visible"
|
|
88 });
|
|
89 $( pieces ).remove();
|
|
90 if ( !show ) {
|
|
91 el.hide();
|
|
92 }
|
|
93 done();
|
|
94 }
|
|
95 };
|
|
96
|
|
97 })(jQuery);
|