Skip to content

Instantly share code, notes, and snippets.

@cecigarcia
Last active March 5, 2020 09:58
Show Gist options
  • Save cecigarcia/c692bf893b0cf8b471295cfee5b1945e to your computer and use it in GitHub Desktop.
Save cecigarcia/c692bf893b0cf8b471295cfee5b1945e to your computer and use it in GitHub Desktop.
const noop = () => {};
const browserSupportsRaf =
window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
(window.mozRequestAnimationFrame && window.mozCancelRequestAnimationFrame) || // Firefox 5 ships without cancel support
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame;
const requestTimeoutNoRaf = (fn, delay, registerCancel) => {
const timeoutId = setTimeout(fn, delay);
registerCancel(() => clearTimeout(timeoutId));
}
const requestTimeoutRaf = (fn, delay, registerCancel) => {
const start = new Date().getTime();
const loop = () => {
const delta = new Date().getTime() - start;
if (delta >= delay) {
fn();
registerCancel(noop);
return;
}
const raf = requestAnimationFrame(loop);
registerCancel(() => cancelAnimationFrame(raf));
};
const raf = requestAnimationFrame(loop);
registerCancel(() => cancelAnimationFrame(raf));
};
const requestTimeout = browserSupportsRaf ? requestTimeoutRaf : requestTimeoutNoRaf;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment