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()