123456789101112131415161718192021222324252627282930313233 |
- '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(force, args) {
- const now = Date.now();
- if (force || now - timestamp > threshold) {
- if (timer) {
- clearTimeout(timer);
- timer = null;
- }
- timestamp = now;
- return fn.apply(null, args);
- }
- if (!timer) {
- timer = setTimeout(() => {
- timer = null;
- timestamp = Date.now();
- return fn.apply(null, args);
- }, threshold - (now - timestamp));
- }
- };
- }
- export default throttle;
|