节流:
预定一个函数只有在大于等于执行周期时才执行,周期内调用不执行,连续触发时,安等待时间执行事件,降低频率。
防抖:
短时间内多次触发同一事件,使他只执行最后一次或只执行第一次中间不执行。连续触发时,不执行事件,定制触发事件,通过延迟时间触发停止操作前执行的最后一次事件。
节流防抖的函数封装:
节流:
// 参数:要处理的方法,等待时间
function throttle(handler,wait){
let lastTime=0;
return function(){
let nowTime=newDate().getTime();
if(nowTime-lastTime>wait){
// 当前点击事件与上次点击时间相差大于wait
handler();
//把上次触发时间赋值为当前触发时间
lastTime=nowTime;
}
}
}
防抖:
function debounce(handler, delay) {
let timer = null;
return function() {
//在延迟时间内再次出发此事件,则清楚上次定时器,重新开启定时器,准备触发事件;
clearTimeout(timer)
timer=setTimeout(function(){
handler()
},delay)
}
}
function debounce(handler, wait) {
let time = null;
//如果handler函数需要传参,则需要去接参
let arg = Array.from(arguments).slice(2)
return function() {
//handler 需要被多个对象调用时,则需要保存这里面的this
let that = this;
clearTimeout(timer)
timer=setTimeout(function(){
handler.apply(that,arg)
},delay)
}
}