封装防抖
防抖:无论方法执行速度有多快,只有在方法执行的最后一次才真正执行
开始时让timer为空,然后第一次执行就会给这个timer添加一个定时器,然后在延迟时间内如果执行了第二次就把第一次的定时器清空了,第三次第四次都会被清空,直到最后一次在延迟的时间内已经没有下一次了,所以就不会清空了,故就执行最后一次。
export function debounce(func,delay){
let timer = null
return function(...args){ //...arg:传入要执行函数的参数
if(timer) clearTimeout(timer)
timer = setTimeout(()=>{
//在delay时间内没有执行下一次则触发apply()
func.apply(this,args)
},delay)
}
}
封装节流
节流:无论方法执行速度有多快,都会在delay时间内只触发一次
开始时让timer为空,然后第一次执行就会给这个timer添加一个定时器,然后在延迟时间内如果执行了第二次就直接return返回空,直到delay时间后才会触发一次apply()并且让timer为空,等待执行第二次。
export function throttle(func,delay=100){
let timer = null
return function(...arg){
if(timer) return
timer = setTimeout(()=>{
func.apply(this,arg)
timer = null
},delay)
}
}