解决双击事件触发两次单击事件

本文介绍了一种通过增加延迟时间解决单击与双击事件冲突的方法。利用setTimeout实现300毫秒内的双击不会触发单击事件,有效避免了事件重复触发的问题。

如果一个节点同时绑定了单击和双击事件, 那么双击的时候就会触发两次单击事件, 两个事件存在冲突。

可以通过增加一个延迟时间来解决这个问题.

let click_store = null; // 存储单击事件

// 单击事件
function single(){
	// 清除第一次单击事件
	clearTimeout(click_store)
	
    click_store = setTimeout(function () {
        // 单击事件的代码
        // ...
    }, 300)
}

// 双击事件
function double(){
	// 清除第二次单击事件
	clearTimeout(click_store)
	
	// 双击事件代码
	// ...
}

原理是:

  1. 双击时, 首先触发了单击事件, 由于设置了 300ms 的延迟, 所以单击事件并没有立即触发, 这个单击事件被存储在了 click_store 中.
  2. 在这300ms内, 发生了第二次单击鼠标的行为(双击), 触发了双击事件和第二次单击事件.
  3. 单击事件先发生, clearTimeout(click_store) 清除了存储在 click_store 中的第一次的单击事件, 然后进入定时器, 单击事件被存储在了 click_store 中, 并且延迟300ms执行.
  4. 在双击事件中, clearTimeout(click_store) 清除了存储在 click_store 中的第二次单击事件, 然后执行了双击事件的代码.
  5. 两次单击事件都被清除了, 所以最后发生的只有双击事件的代码.

本文参考:

  1. JavaScript 技巧篇-js增加延迟时间解决单击双击事件冲突,双击事件触发单击事件 (这篇文章给的方法没有取消第二个单击事件, 所以最后会触发双击事件和一次单击事件)
  2. 双击事件(dblclick)时,不触发单击事件(click)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Charonmomo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值