49 lines
1.3 KiB
JavaScript
49 lines
1.3 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
import $ from 'jquery';
|
||
|
|
||
|
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.
|
||
|
}
|
||
|
if (cb && typeof cb === 'function') { 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}`);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export {Timer};
|