防抖

120 阅读1分钟
    // driectives/debounce
    const debounce = (fn, delay) => {
  let timer = null
  return (...rest) => {
    clearTimeout(timer)
    timer = setTimeout(() => {
      fn.apply(null, rest)
    }, delay)
  }
}

let callback = function () { }

export default {
  bind(el, binding, vnode) {
    el.value = binding.value
    callback = debounce((e) => {
      vnode.context[binding.expression] = e.target.value
      console.log('触发')
    }, 500)
    el.addEventListener('input', callback)
  },
  inserted() { },
  unbind(el) {
    el.removeEventListener('input', callback)
  }
}
    // main.js
    import debounce from "./driectives/debounce"
    Vue.directive('debounce', debounce)