防抖
短时间内大量触发,但只执行一次。原理:设置定时器,xx时间后执行事件处理,期间每次触发事件都会将定时器重置,直到xx时间内无第二次事件触发。
function debounce (func, delay) {
let task = null
return function () {
if (task) {
clearTimeout(task)
}
task = setTimeout(() => {
func.apply(this, arguments)
}, delay)
}
}
节流
隔一段时间执行一次,期间被多次触发也不管。实现原理:设置定时器,xx时间后执行事件处理,当事件执行完后清除定时器。
function throttle (func, delay) {
let task = null
return function () {
if (!task) {
task = setTimeout (() => {
task = null
func.apply(this, arguments)
}, delay)
}
}
}