防抖指令

/**
 * 防抖指令 单位时间只触发最后一次 
 * @param {Function} fn - 执行事件
 * @param {?String|"click"} event - 事件类型 例:"click"
 * @param {?Number|500} time - 间隔时间
 * @param {Array} binding.value - [fn,event,time]
 * 直接使用: v-debounce="fn"
 * 配置事件,间隔时间: v-debounce="[fn,'click',500]"
 * 事件传递参数则: v-debounce="[()=>fn(param),`click`,500]"
 */
export default {
  bind(el, binding) {
    try {
      let fn, event = "click",
        time = 500;
      if (typeof binding.value == 'function') {
        fn = binding.value
      } else {
        [fn, event = "click", time = 500] = binding.value
      }
      let timer;
      el.addEventListener(event, () => {
        timer && clearTimeout(timer)
        timer = setTimeout(() => fn(), time)
      })
    } catch (e) {
      console.log(e)
    }
  }
}

 

posted @ 2023-09-12 18:15  Private!  阅读(9)  评论(0编辑  收藏  举报