节流

节流

上个文章是防抖,他的场景是频繁触发,只取一次,而节流是另一种想法

是什么

节流的思想是,在一定时间内只执行一次,只和时间有关,不被频率影响。

场景

一般用于滚动事件的处理、动画控制

实现

和时间差相关,所以就有很多种写法

时间戳

function throttle(callback, wait) {
let lastDate = Date.now()
return function (...args) {
const nowDate = Date.now()
if (nowDate - lastDate >= wait) {
callback.apply(this, args)
lastDate = nowDate
}
}
}

定时器

会丢失最后一个周期的 callback

function throttle(callback, wait) {
let inThrottle = false
return function (...args) {
if (!inThrottle) {
callback.apply(this, args)
inThrottle = true
setTimeout(() => {
inThrottle = false
}, wait)
}
}
}