Permalink
Browse files

Use requestAnimationFrame polyfill from Erik Möller/Payl Irish/Tino Z…

…ijdel
  • Loading branch information...
1 parent 2fc0276 commit d35cd854ee2f1086f67c2bdb1aa1085d8c3b53b4 @marcuswestin committed Jun 21, 2013
Showing with 35 additions and 9 deletions.
  1. +35 −9 requestAnimationFrame.js
@@ -1,10 +1,36 @@
-var global = window
-module.exports = (
- global.requestAnimationFrame
- || global.mozRequestAnimationFrame
- || global.webkitRequestAnimationFrame
- || global.msRequestAnimationFrame
- || function shimRequestAnimationFrame(fn) {
- setTimeout(fn, 1000/60)
+// From: https://gist.github.com/paulirish/1579671
+
+// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
+// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
+
+// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
+
+// MIT license
+
+(function() {
+ var vendors = ['ms', 'moz', 'webkit', 'o']
+ for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
+ window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']
+ window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame']
+ || window[vendors[x]+'CancelRequestAnimationFrame']
}
-)
+
+ if (!window.requestAnimationFrame) {
+ var lastTime = 0
+ window.requestAnimationFrame = function(callback, element) {
+ var currTime = new Date().getTime()
+ var timeToCall = Math.max(0, 16 - (currTime - lastTime))
+ var id = window.setTimeout(function() { callback(currTime + timeToCall) }, timeToCall)
+ lastTime = currTime + timeToCall
+ return id
+ }
+ }
+
+ if (!window.cancelAnimationFrame) {
+ window.cancelAnimationFrame = function(id) {
+ clearTimeout(id)
+ }
+ }
+}());
+
+module.exports = window.requestAnimationFrame

0 comments on commit d35cd85

Please sign in to comment.