1234567891011121314151617181920212223242526272829303132333435 |
- 'use strict';
- /**
- * Throttle decorator
- * @param {Function} fn
- * @param {Number} freq
- * @return {Function}
- */
- function throttle(fn, freq) {
- let timestamp = 0;
- const threshold = 1000 / freq;
- let timer = null;
- return function throttled() {
- const force = this === true;
- const now = Date.now();
- if (force || now - timestamp > threshold) {
- if (timer) {
- clearTimeout(timer);
- timer = null;
- }
- timestamp = now;
- return fn.apply(null, arguments);
- }
- if (!timer) {
- timer = setTimeout(() => {
- timer = null;
- timestamp = Date.now();
- return fn.apply(null, arguments);
- }, threshold - (now - timestamp));
- }
- };
- }
- export default throttle;
|