interval.js
/**
* Source: https://gist.github.com/manast/1185904
*/
function interval(duration, fn) {
this.baseline = undefined
this.run = function() {
if(this.baseline === undefined) {
this.baseline = new Date().getTime()
}
fn()
var end = new Date().getTime()
this.baseline += duration
var nextTick = duration - (end - this.baseline)
if(nextTick < 0) {
nextTick = 0;
}
(function(i) {
i.timer = setTimeout(function() {
i.run(end)
}, nextTick)
}(this))
}
this.stop = function() {
clearTimeout(this.timer)
}
}
/*** Usage ***/
var timer = new interval(50, function() {
console.log(new Date().getTime())
})
timer.run()