没分清mouseOut和mouseLeave造成的惨案

786 阅读1分钟

前两天在线上发现favorite功能是这个效果

11.gif

当在外层移入的时候,先会变成love的状态,但是移动到中心的时候,又会稳定变成unLove。查看代码,发现使用了onMouseEnter作为移出事件

示例代码:

开始了解这个问题之前,来回顾一下关于鼠标事件远古面试题

问:mouseOutmouseLeave有什么区别?

mouseout: mouseout 事件在定点设备(通常是鼠标)移动至元素或其子元素之外时,会在该元素上触发。, 当指针从一个元素移入其子元素时,因为子元素遮盖了父元素的可视区域,所以 mouseout 也会被触发。

mouseLeave: mouseleave 和 mouseout 是相似的,但是两者的不同在于 mouseleave 不会冒泡而 mouseout 会冒泡。这意味着当指针离开元素其所有后代时,会触发 mouseleave,而当指针离开元素离开元素的后代(即使指针仍在元素内)时,会触发 mouseout

所以拆开刚才那个favorite看,实际上分成两层:

image.png

所以移入第一层时,触发onMouseEnter,此时正常,但是移入子组件时,又触发了onMouseOut,所以此时又变成了unLove状态。所以把onMouseEnter改成onMouseOut就能修复这个问题。

12.gif