Skip to content

Instantly share code, notes, and snippets.

@paulirish
Created February 23, 2011 02:35
Show Gist options
  • Star 10 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save paulirish/839879 to your computer and use it in GitHub Desktop.
Save paulirish/839879 to your computer and use it in GitHub Desktop.
requestAnimFrame() shim.
// see http://paulirish.com/2011/requestanimationframe-for-smart-animating/
// shim layer with setTimeout fallback
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback, element){
window.setTimeout(function(){
callback(+new Date);
}, 1000 / 60);
};
})();
@paulirish
Copy link
Author

claritysource left this comment but deleted it....

If I'm not mistaken, the original code has the following bugs:

  1. (window.webkitRequestAnimationFrame && !timeundefined) evaluates to a Boolean, not a function.
  2. Line 16 will likely be called before line 11, upon which it depends.
  3. In the fallback case, the callback will not be called at 60 frames per second, because the time the callback takes is not factored into the interval. Also, from what I understand, browsers are free to pad setTimeout() with an arbitrary amount of time, making the interval even more error-prone.

@paulirish
Copy link
Author

I've since updated this gist to remove the timeundefined issue as it was specific to Chrome 10 which is now dead and gone. hooray for software updates!

@paulirish
Copy link
Author

Don't use this

use this:

https://gist.github.com/1579671

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment