1 | var raf = function raf(callback) {
|
2 | return +setTimeout(callback, 16);
|
3 | };
|
4 | var caf = function caf(num) {
|
5 | return clearTimeout(num);
|
6 | };
|
7 | if (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 | }
|
15 | var rafUUID = 0;
|
16 | var rafIds = new Map();
|
17 | function cleanup(id) {
|
18 | rafIds.delete(id);
|
19 | }
|
20 | var 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 |
|
27 | cleanup(id);
|
28 |
|
29 |
|
30 | callback();
|
31 | } else {
|
32 |
|
33 | var realId = raf(function () {
|
34 | callRef(leftTimes - 1);
|
35 | });
|
36 |
|
37 |
|
38 | rafIds.set(id, realId);
|
39 | }
|
40 | }
|
41 | callRef(times);
|
42 | return id;
|
43 | };
|
44 | wrapperRaf.cancel = function (id) {
|
45 | var realId = rafIds.get(id);
|
46 | cleanup(id);
|
47 | return caf(realId);
|
48 | };
|
49 | if (process.env.NODE_ENV !== 'production') {
|
50 | wrapperRaf.ids = function () {
|
51 | return rafIds;
|
52 | };
|
53 | }
|
54 | export default wrapperRaf; |
\ | No newline at end of file |