jQuery 的 hover 方法等同于 mouseenter + mouseleave 方法

文章来源: http://www.36ria.com/1756

jQuery中的hover方法是个非常常用的方法,接受二个参数,第一个参数为鼠标移入对象时触发的事件,第二个参数为鼠标移出对象时触发的事件。

很多人误以为hover()是mouserover和mouseout的结合体,实际上不是。

hover =  mouseenter+mouseleave

mouseenter和mouseleave这二个事件,jquery新手应该会觉得很陌生,实际上它实现的功能和mouserover和mouseout是极为类似的,那为什么会出现这二个事件,而不使用mouserover和mouseout呢?

这就要从mouseout的诡异bug说起了,mouseout会在你离开子元素的时候就把事件冒泡到父元素上,也就是说不管你的鼠标是否还在父元素中,只要你一离开子元素,就会触发mouseout。

这说法非常的抽象,来看demo:

http://www.36ria.com/demo/hover/demo.html

尤其看下第三个关于mouseout的示例,你就会发现这个问题的所在。

例子的代码非常简单,这里就不再累述,重点说明下最后一个例子的写法:

$('.selectorClass4').hover(function(){       

  this.check = this.check || 1;

  $(this).stop().fadeTo('slow',this.check++%2==0 ? 1 : 0.4);

});

留意了,这里的hover只有一个参数,也就是只有移入事件,但同样实现了移入和移出。那是如何实现的呢?
非常关键的一个属性:this.check
大家可以使用alert(this.check )试下,非常有意思,奇数为移入,而偶数为移出,但注意第一次移入为undefined,所以才需要this.check = this.check || 1;当this.check不存在时赋值1

转载于:https://www.cnblogs.com/caly/archive/2011/12/28/2304533.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jQuerymouseleavemouseout的区别是什么? 根据引用的资料,mouseentermouseleave事件不会冒泡,而mouseover和mouseout事件会冒泡。具体来说,当鼠标指针进入或离开一个元素时,mouseentermouseleave只会触发被鼠标指针直接进入或离开的元素上的事件处理程序。而mouseover和mouseout事件会在鼠标指针穿过元素边界时触发,包括进入或离开子元素的边界。 以引用的代码为例,当鼠标指针进入或离开.box元素时,分别会执行相应的mouseentermouseleave事件处理程序。而当鼠标指针进入或离开.parent元素时,由于事件会冒泡,所以也会触发.box元素上的相应事件处理程序。 而当使用mouseover和mouseout事件时,会在鼠标指针进入或离开.box元素及其子元素时触发对应的事件处理程序。因此,当鼠标指针进入或离开子元素时,会分别触发.parent元素和.box元素上的事件处理程序。 综上所述,mouseleavemouseout在不冒泡的情况下触发,而mouseentermouseover会在冒泡的情况下触发。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [jQuerymouseout()和mouseleave()之间的区别](https://blog.csdn.net/cyan20115/article/details/106554798)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [jQuery常用事件方法——mouseentermouseleavehover方法](https://blog.csdn.net/shaxiaobai/article/details/115280184)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值