网页单击事件不能触发的原因最近在做的一个Chrome扩展程序 ,添加了一个悬停在窗口右边的Logo按钮,当鼠标移上去之后,显示关闭按钮,通过跟踪调试,确定关闭按钮的事件是绑定成功了,
网页单击事件不能触发的原因bHh无知
最近在做的一个Chrome扩展程序 ,添加了一个悬停在窗口右边的Logo按钮,当鼠标移上去之后,显示关闭按钮,通过跟踪调试,确定关闭按钮的事件是绑定成功了,但是点击的时候事件却不会触发;bHh无知
bHh无知
复盘这一问题,虽然mouseup事件在 logoCloseBtn 的位置触发了,但是由于在mousedown将 logoCloseBtn 的 display 设置为了 none,所以事件就不会冒泡传递到 logoCloseBtn 上了bHh无知
bHh无知
bHh无知
在事件处理过程中,由于某些样式的变化导致 logoCloseBtn
不可见,从而影响了事件的触发和传递。
bHh无知
在浏览器中,当一个元素的 display
属性被设置为 none
时,该元素会从文档流中移除,并且不会响应任何鼠标事件,包括 click
、mousedown
、mouseup
等。这是因为浏览器认为不可见的元素不应该参与交互。
bHh无知
如果在 mousedown
事件触发时,logoCloseBtn
变得不可见,那么当 mouseup
事件触发时,由于 logoCloseBtn
已经不在文档流中,事件就无法正常传递到该元素上。因为事件冒泡是基于元素在 DOM 树中的位置来进行的,不可见元素不会参与事件冒泡过程。
bHh无知
bHh无知
bHh无知
bHh无知
在 HTML 中,事件触发遵循一定的顺序,这个顺序涉及到事件捕获、目标阶段和事件冒泡三个阶段,下面为你详细介绍:
bHh无知
事件捕获是从文档的根节点(通常是 document
)开始,逐级向下查找,直到找到事件的目标元素。在这个过程中,事件会依次经过目标元素的各个祖先元素。例如,当你点击一个按钮时,事件会从 document
开始,依次经过 html
、body
以及按钮的其他祖先元素,最后到达按钮本身。
bHh无知
当事件到达目标元素时,就进入了目标阶段。此时事件会触发目标元素上绑定的相应事件处理程序。
bHh无知
事件冒泡是从目标元素开始,逐级向上传播,直到文档的根节点(document
)。也就是说,在目标元素处理完事件后,事件会依次触发其各个祖先元素上绑定的相同类型的事件处理程序。bHh无知
bHh无知
在 Web 开发中,click
事件并不是在 mousedown
时触发,而是在 mousedown
和 mouseup
事件都成功完成,并且鼠标指针没有移出目标元素时触发。bHh无知
bHh无知
bHh无知
mousedown
事件会在用户按下鼠标按钮(左键、右键或中键)的瞬间触发,无论鼠标按钮是否随后释放。这个事件的触发只依赖于鼠标按钮被按下这个动作。
bHh无知
bHh无知
mouseup
事件在用户释放鼠标按钮的瞬间触发。同样,它只关注鼠标按钮释放这个动作,与按钮按下时的情况无关。
bHh无知
bHh无知
click
事件的触发条件相对复杂一些。它要求在同一个目标元素上依次发生 mousedown
和 mouseup
事件,并且在整个过程中鼠标指针没有移出目标元素。只有满足这些条件,click
事件才会被触发。
bHh无知
bHh无知
bHh无知
通常情况下,这三个事件的触发顺序是:mousedown
-> mouseup
-> click
。也就是说,先按下鼠标按钮触发 mousedown
事件,然后释放鼠标按钮触发 mouseup
事件,最后如果满足条件则触发 click
事件。
bHh无知
在某些特殊的交互场景中,比如在触摸屏设备上,click
事件的触发机制可能会有所不同,并且可能会存在 300ms 的延迟。不过在传统的鼠标交互环境下,上述规则是适用的。
bHh无知
bHh无知
bHh无知
bHh无知
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/service/2025-02-26/2031.html
很赞哦! (0)
赏
有话说 (0)