比如需求是给一个dom或者按钮添加单机事件,还要添加双击事件,如果不做处理,在双击按钮的时候,它会执行两次单机事件和一次双击事件;

例如:

<template>
  <div >
    <button @click="clickHandler" @dblclick="dblclickHandler">注册</button>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
    }
  },
  created() {
  },
  mounted() {
  },
  methods: {
    clickHandler() {
      console.log('单机事件')
    },
    dblclickHandler() {
      console.log('双击事件')
    }
 
  }
}
</script>

如果双击按钮,这时控制台会输出:

 解决办法:

利用计时器,在大概时间模拟双击事件

<template>
  <div >
    <button @click="clickHandler" @dblclick="dblclickHandler">注册</button>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
        timer: null,  //添加一个计时器
    }
  },
  created() {
  },
  mounted() {
  },
  methods: {
    clickHandler() {
        clearTimeout(timer); //清除未执行的定时器
        timer = setTimeout(function () {
            console.log('单机事件')
        }, 400);
    },
    dblclickHandler() {
        clearTimeout(timer); //清除未执行的定时器
        console.log('双击事件')
    }
 
  }
}
</script>

vue3的写法:

let timer = null;
//单击事件
const click=()=>{
	clearTimeout(timer); //清除未执行的定时器
        timer = setTimeout(function () {
            console.log('单击事件'); //单击要执行的事件处理
        }, 400);
}
//双击事件
const doubleClick=()=>{
	clearTimeout(timer); //清除未执行的定时器
      console.log('双击事件'); //双击要执行的事件处理

}

GitHub 加速计划 / vu / vue
80
16
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:4 个月前 )
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 6 个月前
e428d891 Updated Browser Compatibility reference. The previous currently returns HTTP 404. 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐