看完还不懂来打我!
Part1防抖
用于将用户的操作行为触发转换为程序行为触发,防止用户操作的结果抖动。一段时间内,事件在我们规定的间隔 n 秒内多次执行,回调只会执行一次。
1特点
等待某种操作停止后,加以间隔进行操作
持续触发不执行
不触发的一段时间之后再执行
这样说可能不是很好理解。看下面例子,你就懂了。
理想情况下,只要在一定时间内一直有人进电梯,电梯就不可能关闭上去,但是如果超过一定时间没有人进电梯时候,电梯就上去了,这就是防抖(这里为了避免进入一个人电梯就上去一次,这是日常生活的写照,对于程序也应该如此)。
2场景
###1、鼠标滑动事件
2、表单搜索
3、发短信
3代码实现(简单版)
function debounce(fun,time){
let timer
return function(){
clearTimeout(timer)
let args = arguments
timer=setTimeout(()=>{
fun.apply(this,args)
},time)
}
}
Part2节流
上面的问题你应该已经发现了。 电梯(程序)不能一直不执行吧。所以电梯就做了一个限制,如果重量超过2千斤就关闭门了,不让人进入了,必须关门上楼了。
4场景
1、鼠标连续不断地触发某事件(如点击),只在单位时间内只触发一次;
2、懒加载时要监听计算滚动条的位置,但不必每次滑动都触发,可以降低计算的频率,而不必去浪费 CPU 资源;
5代码实现
function throttle(fun,time){
let t1=0 //初始时间
return function(){
let t2=new Date() //当前时间
if(t2-t1>time){
fun.apply(this,arguments)
t1=t2
}
}
}