问:
如何区分jquery中mouse移入移出与穿入穿出事件
答:
jQuery中有多种与鼠标位置相关的事件:
1. mouseenter和mouseleave事件:
- 这是jQuery新增的事件。
- mouseenter:当鼠标移动到元素内部时触发。
- mouseleave:当鼠标移动到元素外部时触发。
- 这两个事件不受事件冒泡的影响,所以更准确。
2. mouseover和mouseout事件:
- 在DOM标准中定义。
- mouseover:当鼠标穿过一个元素,或穿过它的子元素时触发。
- mouseout: 当鼠标离开一个元素,或离开它的子元素时触发。
- 这两个事件受事件冒泡影响,当鼠标移动到元素的子元素上时也会触发。
区别:
- mouseenter/mouseleave只在鼠标真正进入/离开元素时触发一次。
- mouseover/mouseout在鼠标进入/离开元素及其子元素时持续触发。
3. 在DOM与jQuery实现上也有区别:
- DOM只有mouseover/mouseout事件。
- jQuery新增了mouseenter/mouseleave事件,它在底层实现原理上是通过使用stopPropagation()来阻止事件冒泡。
简而言之:
mouseenter/mouseleave更准确,只在元素自身被进入/离开时触发;
mouseover/mouseout受事件冒泡影响,在子元素上也会触发。