js中如何区分click事件和mousedown、mouseup事件
为什么要区分元素的click事件和mousedown、mouseup事件?
在使用js实现元素可拖拽效果时,需要监听鼠标的mouseup、mousedown事件,当拖拽的元素本身需要绑定一个click点击事件时,这种情景下就需要对用户是拖拽操作还是点击操作进行区分。
如何区分click事件和mousedown、mouseup事件?
js中没有提供可以直接进行区分click事件和mousedown、mouseup事件的方法和属性,所以一般是通过一个标志符(一个变量)来进行区分,具体如下:
// 定义标志符
let isMouseEvent = false
// 定义一个变量用来存放click事件和mousedown、mouseup事件发生的目标元素对象
let targetElement = null
// 监听mousedown事件
window.addEventListener(\'mousedown\', (e) => {
if(e.target[attr] === targetElementAttr){ // 根据mousedown事件中target对象的属性来筛选目标元素对象
targetElement = e.target
isMouseEvent = false
// 进行其他操作
}
})
// 监听mousemove事件
window.addEventListener(\'mousemove\', (e) => {
// 仅对目标元素进行操作
if(targetElement){
isMouseEvent = true
// 进行其他操作
}
})
// 监听mouseup事件
window.addEventListener(\'mouseup\', (e) => {
if(isMouseEvent){
// isMouseEvent为true表示为拖拽操作,并将标志符
// 进行鼠标释放操作
} else {
// isMouseEvent为false表示没有进行拖拽操作,即可将其视为点击操作
// 调用点击事件
handleClickEvent()
}
})
// 设置点击事件
function handleClickEvent() {
// 将目标元素清空,防止点击事件执行完后,移动鼠标时触发mousemove事件
targetElement = null
}
总结:
上述方法区分click事件和mousedown、mouseup事件利用的是如果是拖拽元素,会触发mousemove事件,而单纯的click点击事件是不会触发的,当使用上述方法区分时,就不能也没必要为目标元素添加click点击操作。
参考文献:
[1] 区分click事件和mousedown(mouseup、mousemove)方法
[2] mousedown\\mouseup\\click事件关系
继续阅读与本文标签相同的文章
-
Docker 用ansible给主机安装docker
2026-05-18栏目: 教程
-
Docker centos7 with sshd (sshd centos7 常用镜像)
2026-05-18栏目: 教程
-
Docker 做资源限制
2026-05-18栏目: 教程
-
JavaScript 基础类型,数据类型
2026-05-18栏目: 教程
-
[MySQL] docker下安装使用mysql配置主从复制
2026-05-18栏目: 教程
