UNPKG

2.07 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.throttleByAnimationFrame = throttleByAnimationFrame;
9exports.throttleByAnimationFrameDecorator = throttleByAnimationFrameDecorator;
10
11var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
13var _raf = _interopRequireDefault(require("rc-util/lib/raf"));
14
15function throttleByAnimationFrame(fn) {
16 var requestId;
17
18 var later = function later(args) {
19 return function () {
20 requestId = null;
21 fn.apply(void 0, (0, _toConsumableArray2["default"])(args));
22 };
23 };
24
25 var throttled = function throttled() {
26 if (requestId == null) {
27 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
28 args[_key] = arguments[_key];
29 }
30
31 requestId = (0, _raf["default"])(later(args));
32 }
33 };
34
35 throttled.cancel = function () {
36 return _raf["default"].cancel(requestId);
37 };
38
39 return throttled;
40}
41
42function throttleByAnimationFrameDecorator() {
43 return function throttle(target, key, descriptor) {
44 var fn = descriptor.value;
45 var definingProperty = false;
46 return {
47 configurable: true,
48 get: function get() {
49 // In IE11 calling Object.defineProperty has a side-effect of evaluating the
50 // getter for the property which is being replaced. This causes infinite
51 // recursion and an "Out of stack space" error.
52 // eslint-disable-next-line no-prototype-builtins
53 if (definingProperty || this === target.prototype || this.hasOwnProperty(key)) {
54 /* istanbul ignore next */
55 return fn;
56 }
57
58 var boundFn = throttleByAnimationFrame(fn.bind(this));
59 definingProperty = true;
60 Object.defineProperty(this, key, {
61 value: boundFn,
62 configurable: true,
63 writable: true
64 });
65 definingProperty = false;
66 return boundFn;
67 }
68 };
69 };
70}
\No newline at end of file