Skip to content

Instantly share code, notes, and snippets.

@visiongeist
Created August 30, 2012 08:24
Show Gist options
  • Save visiongeist/3524146 to your computer and use it in GitHub Desktop.
Save visiongeist/3524146 to your computer and use it in GitHub Desktop.
requestAnimationFrame for jQuery animations
(function($, window, undefined) {
// 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
var lastTime = 0,
running,
animate = function (elem) {
if (running) {
window.requestAnimationFrame(animate, elem);
jQuery.fx.tick();
}
},
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)
window.requestAnimationFrame = function(fn, element) {
var currTime = new Date().getTime(),
delta = currTime - lastTime,
timeToCall = Math.max(0, 16 - delta);
var id = window.setTimeout(function() {
fn(currTime + timeToCall);
},
timeToCall
);
lastTime = currTime + timeToCall;
return id;
};
if (!window.cancelAnimationFrame) {
window.cancelAnimationFrame = function(id) {
clearTimeout(id);
};
}
jQuery.fx.timer = function (timer) {
if (timer() && jQuery.timers.push(timer) && !running) {
running = true;
animate(timer.elem);
}
};
jQuery.fx.stop = function() {
running = false;
};
}(jQuery, this));
@gnarf
Copy link

gnarf commented Apr 20, 2013

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