1-防抖:指触发事件后,在n秒内函数只执行一次,若在n秒内再次触发则重新计算,防抖debounce一般常用解决办法有两种
- 延迟执行,操作结束后到指定时间才执行
function debounce(func,wait) {
let timeout
return function() {
if(timeout) clearTimeOut(timeout)
timeout = setTimeout(function(){
func.apply(this)
},wait)
}
}
- 立即执行,操作完立即执行函数,过指定时间后才能再次发送请求
function debounce(func,wait) {
let timeout
return function() {
if(timeout) clearTimeOut(timeout)
let callNow = !timeout
timeout = setTimeout(function(){
timeout = null
},wait)
if(callNow) func.apply(this)
}
}
2-节流:连续发生的事件,在n秒内只执行一次函数
- 定时器,固定的时间去发生请求
function thorttle(func,wait) {
let timeout
return function() {
if(!timeout) {
timeout = setTimeout(()=>{
timeout = null
func.apply(this)
},wait)
}
}
}
- 利用时间戳
function thorttle(func,wait) {
let prev = 0
return function() {
let now = Date.now()
if(now-prev>wait){
func.apply(this)
prev = now
}
}
}