为何鼠标在窗口边缘时mousedown事件需完成点击才触发?
问题描述
复现步骤简单:给document添加mousedown事件监听器即可,代码如下:
document.addEventListener('mousedown', () => console.log('mousedown'));
在视口内任意位置点击,按下鼠标时会正常打印mousedown;但在窗口边缘(如全屏窗口的侧边)点击时,仅在松开鼠标时才会打印该日志。Chrome、Firefox、Safari均存在此问题,系统为macOS Monterey 12.3。
请问此现象原因是什么?是否有其他事件延迟了mousedown的触发?
原因解释
这是macOS系统层面的行为导致的,和浏览器自身的事件机制无关。
macOS会优先将窗口边缘的鼠标按下操作识别为窗口调整或拖拽的触发动作,此时系统会先拦截这个鼠标事件,直到你松开鼠标:
- 如果只是点击边缘后松开,系统才会把
mousedown事件传递给浏览器; - 如果按下后拖动了窗口,这个事件会被系统完全消耗,浏览器根本接收不到。
不存在其他浏览器事件延迟mousedown触发的情况,本质是系统级的事件拦截逻辑造成的。
内容的提问来源于stack exchange,提问作者Juan Iglesias
相关产品推荐
相关产品推荐

