-
-
Save johnteee/b1eb10495c860033553af13cab67d724 to your computer and use it in GitHub Desktop.
window.requestAnimationFrame polyfill (with high resolution timing, very precise)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
// requestAnimationFrame polyfill by Erik Möller. | |
// Fixes from Paul Irish, Tino Zijdel, Andrew Mao, Klemen Slavic, Darius Bacon and Joan Alba Maldonado. | |
// Adapted from https://gist.github.com/paulirish/1579671 which derived from | |
// http://paulirish.com/2011/requestanimationframe-for-smart-animating/ | |
// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating | |
// Added high resolution timing. This window.performance.now() polyfill can be used: https://gist.github.com/jalbam/cc805ac3cfe14004ecdf323159ecf40e | |
// MIT license | |
// Gist: https://gist.github.com/jalbam/5fe05443270fa6d8136238ec72accbc0 | |
(function() { | |
var vendors = ['webkit', 'moz', 'ms', 'o'], vp = null; | |
for (var x = 0; x < vendors.length && !window.requestAnimationFrame && !window.cancelAnimationFrame; x++) | |
{ | |
vp = vendors[x]; | |
window.requestAnimationFrame = window.requestAnimationFrame || window[vp + 'RequestAnimationFrame']; | |
window.cancelAnimationFrame = window.cancelAnimationFrame || window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame']; | |
} | |
if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) //iOS6 is buggy. | |
{ | |
var lastTime = 0; | |
window.requestAnimationFrame = function(callback, element) | |
{ | |
var now = window.performance.now(); | |
var nextTime = Math.max(lastTime + 16, now); //First time will execute it immediately but barely noticeable and performance is gained. | |
return setTimeout(function() { callback(lastTime = nextTime); }, nextTime - now); | |
}; | |
window.cancelAnimationFrame = clearTimeout; | |
} | |
}()); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment