/** * requestAnimationFrame polyfill */ import { isServer } from '..'; var prev = Date.now(); /* istanbul ignore next */ function fallback(fn) { var curr = Date.now(); var ms = Math.max(0, 16 - (curr - prev)); var id = setTimeout(fn, ms); prev = curr + ms; return id; } /* istanbul ignore next */ var root = isServer ? global : window; /* istanbul ignore next */ var iRaf = root.requestAnimationFrame || fallback; /* istanbul ignore next */ var iCancel = root.cancelAnimationFrame || root.clearTimeout; export function raf(fn) { return iRaf.call(root, fn); } // double raf for animation export function doubleRaf(fn) { raf(function () { raf(fn); }); } export function cancelRaf(id) { iCancel.call(root, id); }