跳至主要內容

Debounce - 防抖

会功夫的李白...大约 1 分钟通用防抖

无论多长时间,只有最后一次执行达到指定时长才执行

该工具防抖实现于 全局 中,能够实现全局防抖 一致性唯一性,可通过设置name值,使得多个防抖不会相互影响,且提供了闭包用法,可传递参数,无需层层嵌套,一行就可以解决。实现了防抖功能的快捷、多场景化的强大功能。

1. 参数

序号名称类型含义
1fn函数用于执行逻辑
2delay数字防抖触发间隔时长,单位毫秒,多次触发间隔未超过当前时长不执行,长时则触发

2. 普通用法

普通用法为全局通用(多出同时使用会有所影响),直接调用of方法即可

button.addEventListener('click', () => {
    Debounce.of(() => {
        console.log("普通用法");
    }, 3000);
});

3. 闭包方式

闭包方式为内部返回了一个方法,用于提供调用

闭包用法可接受传参

button.addEventListener('click', Debounce.with((e) => {
    console.log("点击事件", e);
    console.log("闭包用法");
}, 3000));

3. 唯一性

为了防止两个防抖相互影响,可通过new方法设置name值来区分

bt1.addEventListener('click', () => {
    Debounce.new('t1').of(() => {
        ta1.value = "普通用法";
    }, 2000)
    Debounce.of(() => {
        ta2.value = "普通用法2";
    }, 3000)
});

除了设置name,还可以通过创建多个Debounce来实现唯一性

const debounce = Debounce.new();
const debounce2 = Debounce.new();
button.addEventListener('click', () => {
    debounce.of(() => {
        console.log("普通用法");
    }, 3000);
});
button2.addEventListener('click', debounce2.with((e) => {
    console.log("点击事件", e);
}, 3000));