summaryrefslogtreecommitdiff
path: root/js/RequestAnimationFrame.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/RequestAnimationFrame.js')
-rw-r--r--js/RequestAnimationFrame.js42
1 files changed, 22 insertions, 20 deletions
diff --git a/js/RequestAnimationFrame.js b/js/RequestAnimationFrame.js
index 77f85c5..b1940ae 100644
--- a/js/RequestAnimationFrame.js
+++ b/js/RequestAnimationFrame.js
@@ -1,22 +1,24 @@
-/**
- * Provides requestAnimationFrame in a cross browser way.
- * http://paulirish.com/2011/requestanimationframe-for-smart-animating/
- */
+(function() {
+ var lastTime = 0;
+ var vendors = ['webkit', 'moz'];
+ 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 ) {
+ if (!window.requestAnimationFrame)
+ 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;
+ };
- window.requestAnimationFrame = ( function() {
-
- return window.webkitRequestAnimationFrame ||
- window.mozRequestAnimationFrame ||
- window.oRequestAnimationFrame ||
- window.msRequestAnimationFrame ||
- function( /* function FrameRequestCallback */ callback, /* DOMElement Element */ element ) {
-
- window.setTimeout( callback, 1000 / 60 );
-
- };
-
- } )();
-
-}
+ if (!window.cancelAnimationFrame)
+ window.cancelAnimationFrame = function(id) {
+ clearTimeout(id);
+ };
+}());