天天看點

Vue 儲存編輯 防抖(debounce) 和 節流(throttle)指令的建立

防抖

//防抖指令期待參數為 [fn, event, time]
Vue.directive('debounce', {
       inserted: function(el, binding) {
           let [fn, event = "click", time = 300] = binding.value
           let timer
           el.addEventListener(event, () => {
               timer && clearTimeout(timer)
               timer = setTimeout(() => fn(), time)
           })
       }
   })

//節流指令期待參數為 [fn, event, time]
Vue.directive('throttle', {
   inserted: function(el, binding) {
       let [fn, event = "click", time = 1500] = binding.value
       let timer, timer_end;
       el.addEventListener(event, () => {
           if (timer) {
               clearTimeout(timer_end);
               return timer_end = setTimeout(() => fn(), time);
           }
           fn();
           timer = setTimeout(() => timer = null, time)
       })
   }
})