美文网首页
🍭写一个酷酷的节流防抖函数

🍭写一个酷酷的节流防抖函数

作者: 索隆萨克 | 来源:发表于2019-04-19 17:14 被阅读0次

1. 定义

/**
 * @param {Function} [fn] [执行的函数]
 * @param {Number} [delay] [延迟毫秒数]
 * @param {Boolean} [isDebounce] [执行防抖还是节流]
 *
 * @return {Function} [返回匿名函数]
 */

function throttle(fn, delay, isDebounce) {
    let timer;
    let lastCall = 0;
    return function(...args) {
        if (isDebounce) {
            if (timer) clearTimeout(timer);
            timer = setTimeout(() => {
                fn(...args);
            }, delay);
        } else {
            const now = new Date().getTime();
            if (now - lastCall < delay) return;
            lastCall = now;
            fn(...args);
        }
    }
}

2. 使用

const doAction = throttle((x,y)=>{console.log(x,y)},100,true)
window.onresize = () => {
  doAction(1,2);
};

3. 防抖 与 节流的区别

防抖:当前时间段内只有一个处理函数
节流:过一段时间就触发一个处理函数

4. 备注

... (三个点): 多数情况下,用于扩展,也叫扩展运算符,也有聚合功能,本文中...args就是聚合功能,将外面传入的参数聚合为args数组。
...args有疑问,请看here

相关文章

网友评论

      本文标题:🍭写一个酷酷的节流防抖函数

      本文链接:https://www.haomeiwen.com/subject/liqpbqtx.html