防抖-有取消功能版

(单位:8秒) 点击“取消防抖”按钮后,再点击“点击这里”按钮,可立即触发事件

0

      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)