87 lines
2 KiB
JavaScript
87 lines
2 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
!function($) {
|
||
|
|
||
|
function Timer(elem, options, cb) {
|
||
|
var _this = this,
|
||
|
duration = options.duration,//options is an object for easily adding features later.
|
||
|
nameSpace = Object.keys(elem.data())[0] || 'timer',
|
||
|
remain = -1,
|
||
|
start,
|
||
|
timer;
|
||
|
|
||
|
this.isPaused = false;
|
||
|
|
||
|
this.restart = function() {
|
||
|
remain = -1;
|
||
|
clearTimeout(timer);
|
||
|
this.start();
|
||
|
}
|
||
|
|
||
|
this.start = function() {
|
||
|
this.isPaused = false;
|
||
|
// if(!elem.data('paused')){ return false; }//maybe implement this sanity check if used for other things.
|
||
|
clearTimeout(timer);
|
||
|
remain = remain <= 0 ? duration : remain;
|
||
|
elem.data('paused', false);
|
||
|
start = Date.now();
|
||
|
timer = setTimeout(function(){
|
||
|
if(options.infinite){
|
||
|
_this.restart();//rerun the timer.
|
||
|
}
|
||
|
cb();
|
||
|
}, remain);
|
||
|
elem.trigger(`timerstart.zf.${nameSpace}`);
|
||
|
}
|
||
|
|
||
|
this.pause = function() {
|
||
|
this.isPaused = true;
|
||
|
//if(elem.data('paused')){ return false; }//maybe implement this sanity check if used for other things.
|
||
|
clearTimeout(timer);
|
||
|
elem.data('paused', true);
|
||
|
var end = Date.now();
|
||
|
remain = remain - (end - start);
|
||
|
elem.trigger(`timerpaused.zf.${nameSpace}`);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Runs a callback function when images are fully loaded.
|
||
|
* @param {Object} images - Image(s) to check if loaded.
|
||
|
* @param {Func} callback - Function to execute when image is fully loaded.
|
||
|
*/
|
||
|
function onImagesLoaded(images, callback){
|
||
|
var self = this,
|
||
|
unloaded = images.length;
|
||
|
|
||
|
if (unloaded === 0) {
|
||
|
callback();
|
||
|
}
|
||
|
|
||
|
images.each(function() {
|
||
|
if (this.complete) {
|
||
|
singleImageLoaded();
|
||
|
}
|
||
|
else if (typeof this.naturalWidth !== 'undefined' && this.naturalWidth > 0) {
|
||
|
singleImageLoaded();
|
||
|
}
|
||
|
else {
|
||
|
$(this).one('load', function() {
|
||
|
singleImageLoaded();
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
|
||
|
function singleImageLoaded() {
|
||
|
unloaded--;
|
||
|
if (unloaded === 0) {
|
||
|
callback();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Foundation.Timer = Timer;
|
||
|
Foundation.onImagesLoaded = onImagesLoaded;
|
||
|
|
||
|
}(jQuery);
|