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

节流:

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

防抖 :

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

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

下面是实现逻辑

首先在新建一个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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 在上周的开发中,又遇到点击保存多次请求数据重复的问题,所以下来学习了一下js的防抖和节流。通过学习了解到,在进行窗...
    any_5637阅读 392评论 0 2
  • 背景 当我们进行窗口resize、scroll、input框内容校验等操作时,如果事件函数调用频率不加控制。会加重...
    夏末远歌阅读 300评论 0 0
  • 封装一个自定义指令防止按钮重复提交。欢迎指正! 1、创建preventReClick.js文件 2、main.js...
    竿牍阅读 1,339评论 0 1
  • 1. 防抖函数 1.1 防抖定义: 函数防抖(debounce):当持续触发事件时(例如mousemove),一定...
    子皙丶阅读 377评论 0 8
  • 节流(throttle)和防抖(debounce)是前端面试中非常高频的一道面试题,在实际项目开发中,也有很多实用...
    半掩时光阅读 653评论 0 0