UNPKG

@mdsfe/mds-ui

Version:

A set of enterprise-class Vue UI components.

70 lines (54 loc) 1.9 kB
'use strict'; exports.__esModule = true; var _defineProperty = require('babel-runtime/core-js/object/define-property'); var _defineProperty2 = _interopRequireDefault(_defineProperty); exports.default = throttleByAnimationFrame; exports.throttleByAnimationFrameDecorator = throttleByAnimationFrameDecorator; var _getRequestAnimationFrame = require('./getRequestAnimationFrame'); var _getRequestAnimationFrame2 = _interopRequireDefault(_getRequestAnimationFrame); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var reqAnimFrame = (0, _getRequestAnimationFrame2.default)(); function throttleByAnimationFrame(fn) { var requestId = void 0; var later = function later(args) { return function () { requestId = null; fn.apply(undefined, args); }; }; var throttled = function throttled() { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } if (requestId == null) { requestId = reqAnimFrame(later(args)); } }; throttled.cancel = function () { return (0, _getRequestAnimationFrame.cancelRequestAnimationFrame)(requestId); }; return throttled; } function throttleByAnimationFrameDecorator() { return function (target, key, descriptor) { var fn = descriptor.value; var definingProperty = false; return { configurable: true, get: function get() { if (definingProperty || this === target.prototype || this.hasOwnProperty(key)) { return fn; } var boundFn = throttleByAnimationFrame(fn.bind(this)); definingProperty = true; (0, _defineProperty2.default)(this, key, { value: boundFn, configurable: true, writable: true }); definingProperty = false; return boundFn; } }; }; }