Vue中防止短时间内连续点击后多次触发请求(js节流思想)

本人处于前端小白阶段,在做项目的产品模块的时候有时会因为网络等原因连续点击提交按钮,导致添加多个重复的产品,刚开始是用disabled限制点击,体验不是太好,偶然在b站上发现一个Js节流视频,但是看得有点云里雾里,所以根据节流的思想自己写了个比较适合我的方法。

1.时间戳写法

<el-button @click="throttle(func, 2000)">测试</el-button>

export default {
   data(){
        return {
            lastTime:0 //默认上一次点击时间为0    
        }
   },
   methods:{
     throttle(func, intervalTime){
        //获取当前时间的时间戳
        let now = new Date().valueOf();
        if(this.lastTime == 0 || (now-this.lastTime) > intervalTime){
        //重置上一次点击时间,intervalTime是我自己设置的间隔时间,根据自己的需要传参
           this.lastTime = now;
           console.log('间隔大于intervalTime秒,触发方法');
           //添加自己要调用的方法
            func();
        }else{
           console.log('不触发');
        }
     },
  }
}

 2.setTimeout写法

<el-button @click="throttle(func, 2000)">测试</el-button>


//封装到公共的工具类中
function throttle(func, time) {//func-需要执行的函数, time-触发的事件间隔
   let timer = 0
   return ()=>{
      if(!timer){
          timer = setTimeout(()=>{
               func();
               timer = 0;
           },time)
       }
    }
 }

ps:在实际使用时建议封装成全局方法或工具类方便调用(Vue还可以封装成v-xxx的形式直接在标签

上用), 这种方法虽然很好,但是遇到请求超时的情况可能不是太好处理(网络原因、数据太大)间隔时间可以跟axios的timeout时间一致。考虑通过后端是否返回res来控制(添加一个loading方法)。方法还有待提高!仅供参考,嘻嘻嘻!!

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值