触发高频时间后n秒内函数只会执行一次,如果n秒内高频时间再次触发,则重新计算时间。
分解:
1.持续触发不执行
2.不触发的一段时间之后再执行
方法:
function debounce(func, ms = 1000) {
let timer;
return function (...args) {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
func.apply(this, args)
}, ms)
}
}
// 测试
const task = () => { console.log('run task') }
const debounceTask = debounce(task, 1000)
window.addEventListener('scroll', debounceTask)