上面说了防抖的,收获很多,在来看看节流,争取自己做出来
题目:有时候,用户会用滚轮滑动页面,滑动页面后,会产生请求,但是此时的请求页面结果并不是用户想要的,很有可能用户要滑动到某一处停下来后,去看页面,但是监听用户停下来的时候去发送请求,明显会造成不良的用户体验,小明心想,那么我就隔一段时间去处理一下请求不就可以了,于是小明写了如下代码:
function ajax(){
console.log("发送请求");
}
var time = null;
window.addEventListener("mousemove",function(e){
if(time){
return;
}
time = setTimeout(() => {
ajax();
time = null;
}, 3000);
})
但是呢,需要对其进行封装
function ajax(){
console.log("发送请求");
console.log(this);
console.log(arguments)
}
window.addEventListener("mousemove",throttle1(ajax,1000));
function throttle(fn,wait){
var time = null;
return function(){
if(time){
return;
}
time = setTimeout(() => {
fn.apply(this,arguments);
time = null;
}, wait);
}
}
function throttle1(fn,delay){
let pro = new Date();
return function(){
let timer = new Date();
if(timer - pro>delay){
fn(arguments);
pro = timer;
}else{
return;
}
}
}