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); }); } });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值