(单位:8秒) 点击“取消防抖”按钮后,再点击“点击这里”按钮,可立即触发事件
function debounce(fn, delay, immediate) {
let timer = null
let debounced = function () {
if (timer) {
clearTimeout(timer)
}
if (immediate) {
let callNow = !timer
timer = setTimeout(() => {
timer = null
}, delay)
if (callNow) {
fn.apply(this, arguments)
}
} else {
timer = setTimeout(() => {
fn.apply(this, arguments)
}, delay)
}
}
debounced.cancel = function () {
clearTimeout(timer)
timer = null
}
return debounced
}
let count = 0
function addCount() {
counterDom.textContent = ++count
}
const counterDom = document.getElementById('counter')
const btnDom = document.getElementById('btn')
const debounced = debounce(addCount, 1000 * 8, true)
btnDom.addEventListener('click', debounced)