Mercurial > hg > isophonics-drupal-site
diff libraries/jquery.pause/jquery.pause.js @ 5:c69a71b4f40f
Add slideshow module
author | Chris Cannam |
---|---|
date | Thu, 07 Dec 2017 14:46:23 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libraries/jquery.pause/jquery.pause.js Thu Dec 07 14:46:23 2017 +0000 @@ -0,0 +1,94 @@ +/*! + * Pause jQuery plugin v0.1 + * + * Copyright 2010 by Tobia Conforto <tobia.conforto@gmail.com> + * + * Based on Pause-resume-animation jQuery plugin by Joe Weitzel + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or(at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +/* Changelog: + * + * 0.1 2010-06-13 Initial release + */ +(function() { + var $ = jQuery, + pauseId = 'jQuery.pause', + uuid = 1, + oldAnimate = $.fn.animate, + anims = {}; + + function now() { return new Date().getTime(); } + + $.fn.animate = function(prop, speed, easing, callback) { + var optall = $.speed(speed, easing, callback); + optall.complete = optall.old; // unwrap callback + return this.each(function() { + // check pauseId + if (! this[pauseId]) + this[pauseId] = uuid++; + // start animation + var opt = $.extend({}, optall); + oldAnimate.apply($(this), [prop, $.extend({}, opt)]); + // store data + anims[this[pauseId]] = { + run: true, + prop: prop, + opt: opt, + start: now(), + done: 0 + }; + }); + }; + + $.fn.pause = function() { + return this.each(function() { + // check pauseId + if (! this[pauseId]) + this[pauseId] = uuid++; + // fetch data + var data = anims[this[pauseId]]; + if (data && data.run) { + data.done += now() - data.start; + if (data.done > data.opt.duration) { + // remove stale entry + delete anims[this[pauseId]]; + } else { + // pause animation + $(this).stop(); + data.run = false; + } + } + }); + }; + + $.fn.resume = function() { + return this.each(function() { + // check pauseId + if (! this[pauseId]) + this[pauseId] = uuid++; + // fetch data + var data = anims[this[pauseId]]; + if (data && ! data.run) { + // resume animation + data.opt.duration -= data.done; + data.done = 0; + data.run = true; + data.start = now(); + oldAnimate.apply($(this), [data.prop, $.extend({}, data.opt)]); + } + }); + }; +})(); \ No newline at end of file