运维日志您现在的位置是:首页 > 博客日志 > 运维日志

网页单击事件不能触发的原因

<a href='mailto:'>微wx笑</a>的头像微wx笑 2025-02-26运维日志22 0 0关键字:   

网页单击事件不能触发的原因最近在做的一个Chrome扩展程序 ,添加了一个悬停在窗口右边的Logo按钮,当鼠标移上去之后,显示关闭按钮,通过跟踪调试,确定关闭按钮的事件是绑定成功了,

网页单击事件不能触发的原因bHh无知

最近在做的一个Chrome扩展程序 ,添加了一个悬停在窗口右边的Logo按钮,当鼠标移上去之后,显示关闭按钮,通过跟踪调试,确定关闭按钮的事件是绑定成功了,但是点击的时候事件却不会触发;bHh无知


bHh无知

复盘这一问题,虽然mouseup事件在 logoCloseBtn 的位置触发了,但是由于在mousedown将 logoCloseBtn 的 display 设置为了 none,所以事件就不会冒泡传递到 logoCloseBtn 上了bHh无知


bHh无知

bHh无知

在事件处理过程中,由于某些样式的变化导致 logoCloseBtn 不可见,从而影响了事件的触发和传递。

事件触发与元素可见性的关系


bHh无知

在浏览器中,当一个元素的 display 属性被设置为 none 时,该元素会从文档流中移除,并且不会响应任何鼠标事件,包括 clickmousedownmouseup 等。这是因为浏览器认为不可见的元素不应该参与交互。

事件冒泡机制的影响


bHh无知

如果在 mousedown 事件触发时,logoCloseBtn 变得不可见,那么当 mouseup 事件触发时,由于 logoCloseBtn 已经不在文档流中,事件就无法正常传递到该元素上。因为事件冒泡是基于元素在 DOM 树中的位置来进行的,不可见元素不会参与事件冒泡过程。


bHh无知



bHh无知


bHh无知

bHh无知

在 HTML 中,事件触发遵循一定的顺序,这个顺序涉及到事件捕获、目标阶段和事件冒泡三个阶段,下面为你详细介绍:

事件捕获阶段


bHh无知

事件捕获是从文档的根节点(通常是 document)开始,逐级向下查找,直到找到事件的目标元素。在这个过程中,事件会依次经过目标元素的各个祖先元素。例如,当你点击一个按钮时,事件会从 document 开始,依次经过 htmlbody 以及按钮的其他祖先元素,最后到达按钮本身。

目标阶段


bHh无知

当事件到达目标元素时,就进入了目标阶段。此时事件会触发目标元素上绑定的相应事件处理程序。

事件冒泡阶段


bHh无知

事件冒泡是从目标元素开始,逐级向上传播,直到文档的根节点(document)。也就是说,在目标元素处理完事件后,事件会依次触发其各个祖先元素上绑定的相同类型的事件处理程序。bHh无知


bHh无知

在 Web 开发中,click 事件并不是在 mousedown 时触发,而是在 mousedown 和 mouseup 事件都成功完成,并且鼠标指针没有移出目标元素时触发。bHh无知

bHh无知

mousedown 事件


bHh无知

mousedown 事件会在用户按下鼠标按钮(左键、右键或中键)的瞬间触发,无论鼠标按钮是否随后释放。这个事件的触发只依赖于鼠标按钮被按下这个动作。


bHh无知

mouseup 事件


bHh无知

mouseup 事件在用户释放鼠标按钮的瞬间触发。同样,它只关注鼠标按钮释放这个动作,与按钮按下时的情况无关。

bHh无知

click 事件


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)

相关文章

文章评论