window.requestanimationframe
Version:
requestAnimationFrame polyfill
50 lines (38 loc) • 1.4 kB
JavaScript
/**
* requestAnimationFrame polyfill v1.0.1
* requires Date.now
*
* © Polyfiller 2015
* Released under the MIT license
* github.com/Polyfiller/requestAnimationFrame
*/
window.requestAnimationFrame || function () {
'use strict';
window.requestAnimationFrame = window.msRequestAnimationFrame
|| window.mozRequestAnimationFrame
|| window.webkitRequestAnimationFrame
|| function () {
var fps = 60;
var delay = 1000 / fps;
var animationStartTime = Date.now();
var previousCallTime = animationStartTime;
return function requestAnimationFrame(callback) {
var requestTime = Date.now();
var timeout = Math.max(0, delay - (requestTime - previousCallTime));
var timeToCall = requestTime + timeout;
previousCallTime = timeToCall;
return window.setTimeout(function onAnimationFrame() {
callback(timeToCall - animationStartTime);
}, timeout);
};
}();
window.cancelAnimationFrame = window.mozCancelAnimationFrame
|| window.webkitCancelAnimationFrame
|| window.cancelRequestAnimationFrame
|| window.msCancelRequestAnimationFrame
|| window.mozCancelRequestAnimationFrame
|| window.webkitCancelRequestAnimationFrame
|| function cancelAnimationFrame(id) {
window.clearTimeout(id);
};
}();