Spaces:
Sleeping
Sleeping
/*! | |
* jQuery UI Effects Explode 1.13.3 | |
* https://jqueryui.com | |
* | |
* Copyright OpenJS Foundation and other contributors | |
* Released under the MIT license. | |
* https://jquery.org/license | |
*/ | |
//>>label: Explode Effect | |
//>>group: Effects | |
/* eslint-disable max-len */ | |
//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness. | |
/* eslint-enable max-len */ | |
//>>docs: https://api.jqueryui.com/explode-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( "explode", "hide", function( options, done ) { | |
var i, j, left, top, mx, my, | |
rows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3, | |
cells = rows, | |
element = $( this ), | |
mode = options.mode, | |
show = mode === "show", | |
// Show and then visibility:hidden the element before calculating offset | |
offset = element.show().css( "visibility", "hidden" ).offset(), | |
// Width and height of a piece | |
width = Math.ceil( element.outerWidth() / cells ), | |
height = Math.ceil( element.outerHeight() / rows ), | |
pieces = []; | |
// Children animate complete: | |
function childComplete() { | |
pieces.push( this ); | |
if ( pieces.length === rows * cells ) { | |
animComplete(); | |
} | |
} | |
// Clone the element for each row and cell. | |
for ( i = 0; i < rows; i++ ) { // ===> | |
top = offset.top + i * height; | |
my = i - ( rows - 1 ) / 2; | |
for ( j = 0; j < cells; j++ ) { // ||| | |
left = offset.left + j * width; | |
mx = j - ( cells - 1 ) / 2; | |
// Create a clone of the now hidden main element that will be absolute positioned | |
// within a wrapper div off the -left and -top equal to size of our pieces | |
element | |
.clone() | |
.appendTo( "body" ) | |
.wrap( "<div></div>" ) | |
.css( { | |
position: "absolute", | |
visibility: "visible", | |
left: -j * width, | |
top: -i * height | |
} ) | |
// Select the wrapper - make it overflow: hidden and absolute positioned based on | |
// where the original was located +left and +top equal to the size of pieces | |
.parent() | |
.addClass( "ui-effects-explode" ) | |
.css( { | |
position: "absolute", | |
overflow: "hidden", | |
width: width, | |
height: height, | |
left: left + ( show ? mx * width : 0 ), | |
top: top + ( show ? my * height : 0 ), | |
opacity: show ? 0 : 1 | |
} ) | |
.animate( { | |
left: left + ( show ? 0 : mx * width ), | |
top: top + ( show ? 0 : my * height ), | |
opacity: show ? 1 : 0 | |
}, options.duration || 500, options.easing, childComplete ); | |
} | |
} | |
function animComplete() { | |
element.css( { | |
visibility: "visible" | |
} ); | |
$( pieces ).remove(); | |
done(); | |
} | |
} ); | |
} ); | |