var raf = function raf(callback) { return +setTimeout(callback, 16); }; var caf = function caf(num) { return clearTimeout(num); }; if (typeof window !== 'undefined' && 'requestAnimationFrame' in window) { raf = function raf(callback) { return window.requestAnimationFrame(callback); }; caf = function caf(handle) { return window.cancelAnimationFrame(handle); }; } var rafUUID = 0; var rafIds = new Map(); function cleanup(id) { rafIds.delete(id); } var wrapperRaf = function wrapperRaf(callback) { var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; rafUUID += 1; var id = rafUUID; function callRef(leftTimes) { if (leftTimes === 0) { // Clean up cleanup(id); // Trigger callback(); } else { // Next raf var realId = raf(function () { callRef(leftTimes - 1); }); // Bind real raf id rafIds.set(id, realId); } } callRef(times); return id; }; wrapperRaf.cancel = function (id) { var realId = rafIds.get(id); cleanup(realId); return caf(realId); }; export default wrapperRaf;