raf.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = wrapperRaf;
  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. 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(realId);
  50. return caf(realId);
  51. };