美文网首页前端开发
vue 防重复点击、节流、防连点(指令实现),移动端自定义双击事

vue 防重复点击、节流、防连点(指令实现),移动端自定义双击事

作者: 臭臭的胡子先生 | 来源:发表于2021-02-12 09:33 被阅读0次

    节流:

    当持续触发事件时,保证一定时间段内只调用一次事件处理函数。

    防抖 :

    当连续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时

    项目在开发过程中,防止重复提交或者重复跳转页面
    我们可以自己定义一个指令通过节流的方式去处理。
    自定义指令,通过在标签原型上面绑定状态的方式,控制是否可以重复点击

    下面是实现逻辑

    首先在新建一个preventReClick.js文件

    export default {
        install(Vue) {
            // 防重复点击(指令实现)
            Vue.directive('preventReClick', {
                inserted(el, binding) {
                    el.addEventListener('click', () => {
                        if (!el.disabled) {
                            el.disabled = true
                            setTimeout(() => {
                                el.disabled = false
                            }, binding.value || 3000)
                        }
                    })
                }
            })
        }
    }
    

    将js文件引入至main.js,并使用

    import install from './preventReClick'
    Vue.use(install)
    

    给要防止重复点击的按钮加上指令v-preventReClick

    <template>
      <div class="page" ref="page">
        <div @click="$event.currentTarget.disabled ? '' : clickFun()" v-preventReClick>点击这里</div>
      </div>
    </template>
    

    vue 双击事件在移动的端没有效果,通过点击事件+时间判断是单击事件还是双击事件

    <script>
    <template>
      <div class="page" ref="page">
        <div @click="clickFun">
          点击双击
        </div>
        <div @click="clickFun1">
          点击双击
        </div>
      </div>
    </template>
    
    export default {
      name: "Home",
      data() {
        return {
          clickTtime: new Date().getTime()
        };
      },
      methods: {
        clickFun(){
       
          if( new Date().getTime() - this.clickTtime < 500 ){
              console.log("双击");
          }else{
              this.clickTtime = new Date().getTime();
              console.log("单机")
          }
       
        },
        clickFun1(){
          let delta = Date.now() - this.clickTtime; //计算两次点击时间差
          this.clickTtime = Date.now();
          console.log(delta)
          if (delta > 0 && delta <= 250) { //双击事件
              console.log('双击事件')
          } else { //滑动事件
              console.log('单击事件')
          }
    
        }
      }
    };
    </script>
    

    相关文章

      网友评论

        本文标题:vue 防重复点击、节流、防连点(指令实现),移动端自定义双击事

        本文链接:https://www.haomeiwen.com/subject/qaxztltx.html