欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > Vue自定义指令-防抖节流

Vue自定义指令-防抖节流

2025/4/19 8:56:45 来源:https://blog.csdn.net/weixin_73251435/article/details/147333205  浏览:    关键词:Vue自定义指令-防抖节流

Vue2版本

// 防抖

// <el-button v-debounce="[reset,'click',300]" ></el-button>

// <el-button v-debounce="[reset]" ></el-button>

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)

    })

  }

})

// 节流

// <el-button v-debounce="[reset,'click',300]" ></el-button>

// <el-button v-debounce="[reset]" ></el-button>

Vue.directive('throttle', {

  inserted: function (el, binding) {

    let [fn, event = 'click', time = 300] = 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)

    })

  }

})

Vue3版本

// 防抖指令

app.directive('debounce', { beforeMount(el, binding) {

let [fn, event = 'click', time = 300] = binding.value;

let timer;

el.addEventListener(event, () => {

if (timer) clearTimeout(timer); timer = setTimeout(() => fn(), time); }); } });

// 节流指令

app.directive('throttle', { beforeMount(el, binding) {

let [fn, event = 'click', time = 300] = 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); }); } });

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词