双击事件与单击事件冲突解决方案

问题来源:

对一个按钮进行单击和双击时所触发的事件是不一样的,但是双击时一定会触发两次双击事件单击,许多需求要求双击只触发

解决方法:

给单击事件一个延时器,给双击事件一个清除延时器的方法,只要在单击事件延时的范围类触发双击事件就会清楚该单击事件双击事件,单击只触发单击事件

<template>
    <div class="click">
           <h1>双击事件与单击事件冲突解决方案</h1>
           <div class="content">
     <h3>问题来源:</h3>
        <div>对一个按钮进行单击和双击时所触发的事件是不一样的,但是双击时一定会触发两次双击事件单击,许多需求要求双击只触发双击事件,单击只触发单击事件</div>
            
     <div class="exp">
            <span>如:单击时触发one 双击时触发事件two</span>
            <el-button type="primary" @click="one" @dblclick="two">单击/双击(旧)</el-button>
            <img src="../../../assets/images/space_img/dblclick1.png" alt="">
            <img src="../../../assets/images/space_img/dblclick2.png" alt="">
     </div>

     <h3>解决方法:</h3>
        <div>给单击事件一个延时器,给双击事件一个清除延时器的方法,只要在单击事件延时的范围类触发双击事件就会清楚该单击事件</div>
            
     <div class="exp">
            <span>如:单击时触发one _new,双击时触发事件two_new但同时会清除单击事件</span>
            <el-button type="primary" @click="one_new" @dblclick="two_new">单击/双击(改进)</el-button>
            <img src="../../../assets/images/space_img/okdbl1.png" alt="">
            <img src="../../../assets/images/space_img/okdbl2.png" alt="">
            <img src="../../../assets/images/space_img/okdbl3.png" alt="">
     </div>
           </div>
           
    </div>
</template>

<script setup lang="ts">
import {ref} from 'vue'
let timer=ref<any>(null)
    const one=()=>{
        console.log('单击');
        
    }
    const two=()=>{
        console.log('双击');
    }
    const one_new=()=>{
        clearTimeout(timer)//清除上一次单击的事件
        timer=setTimeout(function(){
            console.log('单击');
        },500)
    }
    const two_new=()=>{
        clearTimeout(timer)//清除单击事件
        console.log('双击');
    }

</script>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值