节流与防抖
- 将高频操作变成单位时间内只操作一次
- 应用场景:浏览电商网站的商品列表,滑动触底就会加载更多
window.addEventListener('scroll',this.throttle(this.handlescroll,1000))
handlescroll(){
let h = document.documentElement.scrollTop||document.body.scrollTop
console.log(h)
}
throttle(fn,interval){
let last = 0;
return function(){
let context = this;
let args = arguments;
let now = +new Date()
if((now-last)>interval){
last = now;
fn.apply(context,args)
}
}
},
- 将多次操作合并成一次
- 应用场景:搜索框输入后等待一小段时间才进行搜索
debounce(fn,timout){
let timer = null;
return function(params){
let context = this;
let args = arguments;
if(timer){
clearTimeout(timer)
}
timer = setTimeout(()=>{
fn.apply(context,args)
},timout)
}
},
- 如果一直操作输入就不会出现结果 我们设置一个最大等待时间 超过这个时间就出结果
betterDebounce(fn,delay){
let last = 0;
let timer = null;
return function(){
let context = this;
let now = +new Date();
let args = arguments;
if((now-last)<delay){
clearInterval(timer)
timer = setTimeout(()=>{
fn.apply(context,args)
last = now;
},delay)
}else{
last = now;
fn.apply(context,args)
}
}
},