防止用户的请求过于频繁
只要最后一次的时间操作
防抖算法:
let inp = document.querySelector("input");
let time = null;
inp.oninput = function() {
if (t !== null) {
clearTimeout(t);
}
t = setTimeout(() => {
// 封装的业务逻辑代码
}, 500);
}
设置input输入框,绑定事件oninput,输入框检测到用户的输入时,触发function函数,每一次触发,t都会被附一个计时器,假设第一次触发事件后以后都不在触发事件,则在500ms后自动执行封装的业务逻辑代码,如果在500ms之后又进行了一次触发操作,则原计时器会被清空,并且赋给变量time一个新的计时器,重新从500ms开始倒计时,这样如果每次的触发事件的时间间隔都小于500ms时,业务逻辑不会执行,等到计时器到时间了才会执行。
注意:防抖的算法和核心业务逻辑分开封装,利用闭包封装。
let inp = document.querySelector("input");
inp.oninput = debounce(function() {
// 封装业务逻辑代码
}, 500) // 传入两个参数,执行业务逻辑函数,防抖的时间间隔
function debounce(fn, delay) {
return function() {
if (t !== null) {
clearTimeout(t);
}
t = setTimeout(() => {
fn();
}, delay);
}
}