| ; | |
| /** | |
| * 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; | |