blob: ad830b27b4eebf57fd99dd71e29c1f1d3d68daa1 [file] [log] [blame]
guangchao.xu070005a2020-12-07 09:56:40 +08001let timer, flag;
2/**
3 * 节流原理:在一定时间内,只能触发一次
4 *
5 * @param {Function} func 要执行的回调函数
6 * @param {Number} wait 延时的时间
7 * @param {Boolean} immediate 是否立即执行
8 * @return null
9 */
10function throttle(func, wait = 500, immediate = true) {
11 if (immediate) {
12 if (!flag) {
13 flag = true;
14 // 如果是立即执行,则在wait毫秒内开始时执行
15 typeof func === 'function' && func();
16 timer = setTimeout(() => {
17 flag = false;
18 }, wait);
19 }
20 } else {
21 if (!flag) {
22 flag = true
23 // 如果是非立即执行,则在wait毫秒内的结束处执行
24 timer = setTimeout(() => {
25 flag = false
26 typeof func === 'function' && func();
27 }, wait);
28 }
29
30 }
31};
32export default throttle