raf.js 1.3 KB

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