关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别

本文详细解析了mouseover、mouseout、mouseenter及mouseleave等鼠标事件的区别与应用场景,特别指出这些事件在元素及其子元素上的触发行为差异,并提供了如何避免低版本浏览器中可能出现的闪动问题的方法。

鼠标滑过的时候出现一个层,当鼠标滑到当前层的话mouseover和mouseout在低版本的浏览器会出现闪动的现象,解决这个现象的办法有许多,不过我觉得有一种是最简单的那就是把mouseover和mouseout换成对应的mouseenter和mouseleave。


当鼠标指针位于元素上方时,会发生 mouseover 事件。


该事件大多数时候会与 mouseout 事件一起使用。
注释:与 mouseenter 事件不同,不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件。只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件。

注释:与 mouseleave 事件不同,不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件。只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件。请看下面例子的演示。


当鼠标指针穿过元素时,会发生 mouseenter 事件。该事件大多数时候会与mouseleave 事件一起使用。
注意:mouseover ,mouseout当鼠标指针穿过被选元素子元素时,也会触发事件。这在绑定事件时,有时出现意想不到的Bug可能就是由 mouseover mouseout 事件引起的

mouseover与mouseenter


不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件。

只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件。


mouseout与mouseleave
不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件。

只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件。


参考效果 :http://www.w3school.com.cn/tiy/t.asp?f=jquery_event_mouseleave_mouseout

mouseovermouseoutmouseentermouseleave 均为鼠标事件,它们之间的区别如下: - **触发条件**:mouseover 事件鼠标指针穿过被选元素或其子元素时触发;mouseenter 事件仅在鼠标指针穿过被选元素时触发。mouseout 事件鼠标指针离开被选元素或其子元素时触发;mouseleave 事件鼠标指针离开被选元素时触发[^1]。 - **冒泡特性**:在父元素上绑定 mouseovermouseout 事件,子元素同样也会触发,即子元素 mouseovermouseout 事件会冒泡至父元素;而父元素绑定 mouseentermouseleave 事件只对父元素有效,子元素不会触发,即 mouseentermouseleave 事件不会冒泡至父元素。例如在一个父元素包含子元素的结构中,进入子元素时,由于子元素的 mouseover 事件冒泡到父元素中,被父元素监听到,进而触发了父元素的 mouseover 响应事件;离开子元素进入父元素时,会先触发一次 mouseout 再触发 mouseover。而使用 mouseentermouseleave 时,不会出现这种因为子元素导致的多次触发情况[^3][^4]。 - **实际应用**:在项目中,mouseoutmouseover 可能会比较少用,因为如果子元素或者父元素也绑定了相应的 mouseoutmouseover 事件鼠标移入移出子元素或者父元素的时候,由于冒泡、和多次触发等原因,可能使得结果比较复杂。而 mouseentermouseleave 由于不冒泡,使用起来结果更清晰可控[^2]。 以下是一个简单的 HTML + jQuery 代码示例,用于演示 mouseovermouseout 事件: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <style> body { margin-top: 100px; margin-left: 100px; } .father { width: 200px; height: 200px; background-color: blue; overflow: hidden; } .son { width: 100px; height: 100px; background-color: red; margin: 50px 50px; } </style> <script src="jquery.js"></script> <script> $(document).ready(function () { $('.father').mouseover(function () { console.log('进入'); }); $('.father').mouseout(function () { console.log('出去'); }); }); </script> <body> <div class="father"> <div class="son"></div> </div> </body> </html> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值