UNPKG

1.22 kBJavaScriptView Raw
1var raf = function raf(callback) {
2 return +setTimeout(callback, 16);
3};
4var caf = function caf(num) {
5 return clearTimeout(num);
6};
7if (typeof window !== 'undefined' && 'requestAnimationFrame' in window) {
8 raf = function raf(callback) {
9 return window.requestAnimationFrame(callback);
10 };
11 caf = function caf(handle) {
12 return window.cancelAnimationFrame(handle);
13 };
14}
15var rafUUID = 0;
16var rafIds = new Map();
17function cleanup(id) {
18 rafIds.delete(id);
19}
20var wrapperRaf = function wrapperRaf(callback) {
21 var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
22 rafUUID += 1;
23 var id = rafUUID;
24 function callRef(leftTimes) {
25 if (leftTimes === 0) {
26 // Clean up
27 cleanup(id);
28
29 // Trigger
30 callback();
31 } else {
32 // Next raf
33 var realId = raf(function () {
34 callRef(leftTimes - 1);
35 });
36
37 // Bind real raf id
38 rafIds.set(id, realId);
39 }
40 }
41 callRef(times);
42 return id;
43};
44wrapperRaf.cancel = function (id) {
45 var realId = rafIds.get(id);
46 cleanup(id);
47 return caf(realId);
48};
49if (process.env.NODE_ENV !== 'production') {
50 wrapperRaf.ids = function () {
51 return rafIds;
52 };
53}
54export default wrapperRaf;
\No newline at end of file