一招实现vue防抖、节流,超容易上手 不看就后悔啦 千万别错过

1、Vue自定义指令实现防抖函数

 所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。

在Js中防抖函数的使用:

function debounce(fn,delay){
    let time = null 
    return function() {
        if(time){
            clearTimeout(time) 
        }
        timer = setTimeout(fn,delay) 
    }
}

而在Vue中我们可以使用自定义指令(Vue.directive)来实现 ,不懂的朋友可以看看Vue官网,Vue2.x与3.x写法上有所区别,我这里用的是2.x写法

Vue.directive('antiShake', {
    "inserted": function(el, bingding) {
        let time = null;
        /* 添加个点击事件 */
        el.addEventListener('click', function() {
            if (time) {
                /* 清除定时器 */
                clearTimeout(time)
            }
            /*禁用此元素*/
            el.disabled = true
            time = setTimeout(() => {
                /*启用此元素 */
                el.disabled = false;
            }, 500);
        })
    }

})

2、Vue自定义指令实现节流

节流简单来讲,就是指连续触发事件但是在 n 秒中只执行一次函数。

在Js中节流函数的使用:

function throttle(fn,delay){
    let value= true
    return function() {
       if(!value){
           return false 
       }
        value= false
        setTimeout(() => {
            fn()
            value= true;
        }, delay)
    }
}

在Vue中通过自定义指令实现:

Vue.directive('throttle', {
    'inserted': function(el, bind) {
        el.addEventListener('click', function() {
            if (!el.disabled) {
                el.disabled = true
                setTimeout(() => {
                    el.disabled = false
                }, 500);
            }
        })
    }
})

3、最后实现

<van-button
      color="linear-gradient(to right, #39a9ed,#409EFF)"
      class="van-button"
      hairline
      type="info"
      size="normal"
      v-antiShake
      @click="messageClick"
    >
      修改
    </van-button>

只需要在需要用到的地方上使用 v-antiShake 就可以实现,这里以防抖为例子  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枫ゞ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值