. 设置定时器,每次事件触发时,就检查定时器是否启用,如果启用,说明事件还在持续中,不应该触发事件处理函数,所以应该:清空定时器,并再重新开启定时;只有当事件触发后一定时间,没有再检测到事件,才触发事件处理函数
let timer = null;
el.addEventListener('keyup', (e) => {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
console.log(el.value);
}, 500)
})
. 封装防抖函数 - 采用闭包的形式
function Debounce(fn, delay = 500) {
let timer = null;
return function () {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
fn.apply(this, arguments);
}, delay)
}
}
el.addEventListener('keyup', Debounce(() => {
console.log(el.value);
}, 500))