防抖:前面的所有的触发都被取消,最后一次执行在规定的时间之后才会触发,也就是说如果连续快速的触发,只会执行一次
js实现防抖,短时间内多次触发的方法,只执行最后一次
let input = document.querySelector('input')
let t = null
input.oninput = function(){
if(t!=null){
clearTimeout(t) //每次执行前都清除一次定时器
}
t = setTimeout(() => {
console.log(this.value)
}, 500);
}
代码优化后(闭包):
let input = document.querySelector('input')
input.oninput=debounce(function(){
console.log(this.value)
},500);
function debounce(fn,delay){
let t = null
return function(){
if( t!==null){
clearTimeout(t)
}
t = setTimeout(() => {
fn.call(this);
}, delay);
}
}