前两天在线上发现favorite功能
是这个效果
当在外层移入的时候,先会变成love
的状态,但是移动到中心的时候,又会稳定变成unLove
。查看代码,发现使用了onMouseEnter
作为移出事件
。
示例代码:
开始了解这个问题之前,来回顾一下关于鼠标事件
的远古面试题
。
问:mouseOut
和mouseLeave
有什么区别?
mouseout: mouseout
事件在定点设备(通常是鼠标)移动至元素或其子元素之外时,会在该元素上触发。, 当指针从一个元素移入其子元素时,因为子元素遮盖了父元素的可视区域,所以 mouseout
也会被触发。
mouseLeave: mouseleave
和 mouseout
是相似的,但是两者的不同在于 mouseleave
不会冒泡而 mouseout
会冒泡。这意味着当指针离开元素及其所有后代时,会触发 mouseleave
,而当指针离开元素或离开元素的后代(即使指针仍在元素内)时,会触发 mouseout
。
所以拆开刚才那个favorite
看,实际上分成两层:
所以移入第一层时,触发onMouseEnter
,此时正常,但是移入子组件时,又触发了onMouseOut
,所以此时又变成了unLove
状态。所以把onMouseEnter
改成onMouseOut
就能修复这个问题。