root / drupal7 / sites / all / modules / jquery_update / replace / ui / ui / jquery.ui.effect-explode.js @ 503b3f7b
1 | 503b3f7b | Assos Assos | /*!
|
---|---|---|---|
2 | * jQuery UI Effects Explode 1.10.2
|
||
3 | * http://jqueryui.com
|
||
4 | *
|
||
5 | * Copyright 2013 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); |