防抖
目的:对于短时间内连续触发的事件,让某个时间期限内,事件处理函数只执行一次。
思路:在第一次触发事件时,不立即执行函数,给出一个期限值,在期限值内没有触发事件,则执行函数;如果在期限值内触发了事件,则重新计时。
实现:使用setTimeout
函数
/*
* 借助闭包
* func 执行的函数
* delay 期限值
*/
function debounce(func,delay){
let timer = null
return function() {
if(timer){
clearTimeout(timer)
}
timer = setTimeout(func,delay)
}
}
节流
目的:如果短时间内大量触发同一事件,那么在函数执行一次之后,该函数在指定的时间期限内不再工作,直至过了这段时间才重新生效。
思路:触发函数事件后,立即执行函数,然后在某个时间段内暂时不执行函数,过了这段时间后再重新激活。
实现:使用setTimeout
函数
function throttle(func,delay){
let timer = null
return function() {
if(timer){
return false
}
timer = setTimeout(() => {
func()
}, delay)
}
}