84 lines
2.2 KiB
JavaScript
84 lines
2.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);
|