animation-frame-polyfill
Version:
Polyfill requestAnimationFrame and cancelAnimationFrame
36 lines (30 loc) • 1.16 kB
JavaScript
var prefix = ['webkit', 'moz', 'ms', 'o'];
export var requestAnimationFrame = function () {
for (var i = 0, limit = prefix.length; i < limit && !window.requestAnimationFrame; ++i) {
window.requestAnimationFrame = window[prefix[i] + 'RequestAnimationFrame'];
}
if (!window.requestAnimationFrame) {
var lastTime = 0;
window.requestAnimationFrame = function (callback) {
var now = new Date().getTime();
var ttc = Math.max(0, 16 - now - lastTime);
var timer = window.setTimeout(function () {
return callback(now + ttc);
}, ttc);
lastTime = now + ttc;
return timer;
};
}
return window.requestAnimationFrame.bind(window);
}();
export var cancelAnimationFrame = function () {
for (var i = 0, limit = prefix.length; i < limit && !window.cancelAnimationFrame; ++i) {
window.cancelAnimationFrame = window[prefix[i] + 'CancelAnimationFrame'] || window[prefix[i] + 'CancelRequestAnimationFrame'];
}
if (!window.cancelAnimationFrame) {
window.cancelAnimationFrame = function (timer) {
window.clearTimeout(timer);
};
}
return window.cancelAnimationFrame.bind(window);
}();