getRequestAnimationFrame.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.cancelRequestAnimationFrame = cancelRequestAnimationFrame;
  6. exports.default = getRequestAnimationFrame;
  7. var availablePrefixs = ['moz', 'ms', 'webkit'];
  8. function requestAnimationFramePolyfill() {
  9. var lastTime = 0;
  10. return function (callback) {
  11. var currTime = new Date().getTime();
  12. var timeToCall = Math.max(0, 16 - (currTime - lastTime));
  13. var id = window.setTimeout(function () {
  14. callback(currTime + timeToCall);
  15. }, timeToCall);
  16. lastTime = currTime + timeToCall;
  17. return id;
  18. };
  19. }
  20. function getRequestAnimationFrame() {
  21. if (typeof window === 'undefined') {
  22. return function () {};
  23. }
  24. if (window.requestAnimationFrame) {
  25. // https://github.com/vuejs/vue/issues/4465
  26. return window.requestAnimationFrame.bind(window);
  27. }
  28. var prefix = availablePrefixs.filter(function (key) {
  29. return "".concat(key, "RequestAnimationFrame") in window;
  30. })[0];
  31. return prefix ? window["".concat(prefix, "RequestAnimationFrame")] : requestAnimationFramePolyfill();
  32. }
  33. function cancelRequestAnimationFrame(id) {
  34. if (typeof window === 'undefined') {
  35. return null;
  36. }
  37. if (window.cancelAnimationFrame) {
  38. return window.cancelAnimationFrame(id);
  39. }
  40. var prefix = availablePrefixs.filter(function (key) {
  41. return "".concat(key, "CancelAnimationFrame") in window || "".concat(key, "CancelRequestAnimationFrame") in window;
  42. })[0];
  43. return prefix ? (window["".concat(prefix, "CancelAnimationFrame")] || window["".concat(prefix, "CancelRequestAnimationFrame")]).call(this, id) : clearTimeout(id);
  44. }