mithril-vndb/api/tests/async.js
Pat Cavit 0cf509f674 Add forcing support and improve tests
Also verify that we're using tabs, whee.
2016-05-19 10:59:41 -07:00

46 lines
1.5 KiB
JavaScript

var _fns = []
var _last = 0
var _frame = 1000 / 60
module.exports = {
setTimeout : function($window) {
$window.setTimeout = typeof window === "object" ? window.setTimeout : global.setTimeout;
$window.clearTimeout = typeof window === "object" ? window.clearTimeout : global.setTimeout;
},
requestAnimationFrame : function($window) {
// Modified version of https://github.com/chrisdickinson/raf
// Copyright chrisdickinson I guess?
$window.requestAnimationFrame = typeof window === "object" ? window.requestAnimationFrame : function(fn) {
if(!_fns.length) {
var now = Date.now()
var next = Math.max(0, _frame - (now - _last))
_last = next + now
setTimeout(function() {
var fns = _fns.slice()
_fns = []
for(var i = 0; i < fns.length; i++) {
if(typeof fns[i] !== "function") {
continue
}
fns[i](_last)
}
}, Math.round(next))
}
_fns.push(fn)
return _fns.length - 1;
}
$window.cancelAnimationFrame = typeof window === "object" ? window.cancelAnimationFrame : function(handle) {
_fns[handle] = null
};
}
}