I want to create a global timer object in javascript and then be able to add callbacks to it on the fly. This way I can just use one global timer in my script to execute all
Just a slightly modified version of aekeus approach. Now with pause- & resumable timers, third arguments
and a faster callbacks
-loop:
function Interval(callback, freq) {
// array of callback functions
var args = arguments,
callbacks = [callback],
paused = false;
// register the global timer
var id = setInterval(function () {
if(paused) return;
var len = callbacks.length,
i = len;
while(i--) callbacks[len - 1 - i].apply(Interval, Array.prototype.slice.call(args, 2, args.length));
}, freq);
// return a Global Timer object
return {
id: function () {
return id;
},
add: function (cb) {
callbacks.push(cb);
},
clear: function () {
if (id === null) return;
clearInterval(id);
id = null;
},
pause: function(){
paused = true;
},
resume: function(){
paused = false;
}
};
}
You can pass in extra-arguments
like with default setInterval
's (even in IE lt 9):
function callback(date) {
console.log(date);
}
var interval = Interval(callback, 1000, new Date);
Usage example:
var interval = Interval(function () {
console.log("init", new Date);
}, 1000);
interval.add(function () {
console.log("a", new Date);
});
interval.add(function () {
console.log("b", new Date);
});
document.onmousedown = interval.pause;
document.onmouseup = interval.resume;