js监听鼠标单击和双击事件,冲突问题处理

ops/2024/11/10 12:13:38/

在浏览器中,单击事件通常会在双击事件之前触发,因此在处理单击和双击事件时,双击操作往往会先触发一次单击事件,这会导致意外的行为。

要解决这个问题,可以通过延迟处理单击事件,给浏览器一些时间来判断用户是否会进行双击操作。以下是一个常见的解决方案:

1. 使用延迟来区分单击和双击事件

通过 setTimeout 设置一个延迟(例如 200 毫秒),在延迟结束后才执行单击事件的处理逻辑。如果在这段时间内检测到双击事件,则取消单击事件的执行。

2. 具体实现

下面是如何在你的代码中实现这个逻辑的示例:

javascript">let clickTimeout = null;function onClick(e) {if (clickTimeout) {clearTimeout(clickTimeout);clickTimeout = null;} else {clickTimeout = setTimeout(() => {const mousePos = getMousePos(e);if (selectedPolygon) return;  // 如果正在拖拽,不响应点击事件currentPolygon.push(mousePos);if (currentPolygon.length > 1) {drawLine(currentPolygon[currentPolygon.length - 2], currentPolygon[currentPolygon.length - 1]);}drawCircle(mousePos);  // 绘制当前点clickTimeout = null;}, 200); // 200ms 的延迟,用于等待双击事件}
}function onDoubleClick(e) {if (clickTimeout) {clearTimeout(clickTimeout);clickTimeout = null;}if (currentPolygon.length > 2) {polygons.push([...currentPolygon]);  // 将当前多边形保存到 polygons 数组中drawAllPolygons();  // 重新绘制所有多边形currentPolygon = [];  // 清空当前多边形的点,准备绘制下一个多边形}
}

3. 工作原理

  • 每次鼠标单击时,onClick 函数都会启动一个 200 毫秒的定时器。
  • 如果在这段时间内没有触发双击事件,则会执行单击的处理逻辑。
  • 如果在 200 毫秒内触发了双击事件,单击处理逻辑会被取消。

4. 注意事项

  • 延迟时间可以根据实际需求调整,200 毫秒通常是一个比较合适的值。
  • 此方法能够有效区分单击和双击事件,并防止双击时意外触发单击事件。

这样处理后,单击和双击事件的冲突问题应该可以解决。


http://www.ppmy.cn/ops/98475.html

相关文章

flv和 rtmp视频负载类型的差异

FLV中的视频类型标记 FLV文件和流中的视频类型通过"VideoTag"中的几个关键字段来标记: Frame Type: 表示帧的类型,比如关键帧或差异帧。 CodecID: 表示使用的编解码器类型。例如: 2代表Sorenson H.2633代表Screen Video4代表On2 …

运维学习————Linux环境下Tomcat的部署

目录 一、环境准备 二、 启动测试 三、访问端口修改 四、部署web项目 1、材料准备 2、部署 2.1、上传war包到webapps目录下 2.2、修改项目配置 2.3、浏览器访问 引申 一、环境准备 tomcat安装包:apache-tomcat-9.0.52 JDK环境: 我使用的y…

Java开发程序员职业发展路径

入行阶段:后端 3年 目标 在这一阶段,你将专注于后端开发,特别是Java编程语言及其相关技术栈。 主要任务和技能 掌握Java基础: 理解Java语言的核心概念,如OOP(面向对象编程)、数据结构、算法等。学习后端…

基于Springboot教学管理系统pf

TOC springboot507基于Springboot教学管理系统pf 第1章 绪论 1.1选题动因 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和笔记本…

day52-graph theory-part03-8.23

tasks for today: 1. 101.孤岛总面积 2. 102.沉默孤岛 3. 103.水流问题 4. 104.建造最大岛屿 -------------------------------------------------------------------------------------- 1. 101.孤岛总面积 pay attention to the requirement, it is not calculating the…

UE5.4 - 下载和安装

一. 简介 虚幻引擎(Unreal Engine)是由 Epic Games 公司推出的一款功能强大的游戏开发引擎。它于 1998 年推出第一代,其口号是 “全球最开放、最先进的实时 3D 创作工具”。 虚幻引擎被广泛应用于游戏产业,创作出了众多知名的 3…

【SpringBoot】优化慢启动应用的用户体验

通过深入分析SpringBoot中WebServer的启动流程,插入自定义的Loading页面展示逻辑,优化软件使用时的用户体验。 背景 Java本身的特点,再加上开发人员能力差,软件开发工程化程度低等等问题,经过一段时间的迭代之后&…

Vue的生命周期了解

目录 1.何为Vue的生命周期 2.Vue2生命周期阶段 (1)beforeCreate(创建前) (2)created(创建后) (3)beforeMount(挂载前) (4)mounted(挂载后) (5)beforeU…