/* * jQuery UI Effects Explode @VERSION * * Copyright 2010, AUTHORS.txt * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Effects/Explode * * Depends: * jquery.effects.core.js */ (function($) { $.effects.explode = function(o) { return this.queue(function() { var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode; var el = $(this).show().css('visibility', 'hidden'); var offset = el.offset(); //Substract the margins - not fixing the problem yet. offset.top -= parseInt(el.css("marginTop"),10) || 0; offset.left -= parseInt(el.css("marginLeft"),10) || 0; var width = el.outerWidth(true); var height = el.outerHeight(true); for(var i=0;i') .css({ position: 'absolute', visibility: 'visible', left: -j*(width/cells), top: -i*(height/rows) }) .parent() .addClass('ui-effects-explode') .css({ position: 'absolute', overflow: 'hidden', width: width/cells, height: height/rows, left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0), top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0), opacity: o.options.mode == 'show' ? 0 : 1 }).animate({ left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)), top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)), opacity: o.options.mode == 'show' ? 1 : 0 }, o.duration || 500); } } // Set a timeout, to call the callback approx. when the other animations have finished setTimeout(function() { o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide(); if(o.callback) o.callback.apply(el[0]); // Callback el.dequeue(); $('div.ui-effects-explode').remove(); }, o.duration || 500); }); }; })(jQuery);