关于单击与双击事件

鼠标的单击与双击都是我们常用的鼠标事件,然而这两个事件一起触发时便有了问题


问题

如下,我想在这个div中同时设置单击事件和双击事件,并让两者执行不同的处理函数

<div onclick="console.log('click')" ondbclick="console.log('dbclick')">
Test
</div>

但事实上,在双击这个div时,你会看到这样的输出:

click
click
dbclick

这意味着,每个双击事件将会触发两次单击事件以及一次双击事件,这让想用单双击来触发不同的事件的我就很为难了


解决

该问题的解决类似于函数节流,在进行点击后,借助setTimeout等待一段时间再执行单击事件,在该时间内,若没有进行下一次点击,就认为进行了单击,否则,就取消前面的定时器,转而触发双击事件

  • 简单示例
let div = document.querySelector('.con');
let firstClick = false;
div.onclick = ()=>{
  if(!firstClick){
    firstClick = setTimeout(()=>{
      onClick();
      firstClick = false;
    },300);
  }
  else{
    clearTimeout(firstClick);
    onDoubleClick();
    firstClick = false;
  }
}
function onClick(){
  console.log('click');
}
function onDoubleClick(){
  console.log('double click');
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,538评论 1 11
  • 本节介绍各种常见的浏览器事件。 鼠标事件 鼠标事件指与鼠标相关的事件,主要有以下一些。 click 事件,dblc...
    许先生__阅读 2,498评论 0 4
  • 本篇博客源地址 总结: 鼠标事件 1.click与dbclick事件ele.click()ele.click(ha...
    ZombieBrandg阅读 683评论 0 1
  • 总结: 鼠标事件 1.click与dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r阅读 1,629评论 2 10
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,678评论 1 45