antvis/G6
The issue has been closed
【BUG】The trigger mechanism of the onHoverEnd event does not match expectations #6303
resetsix posted onGitHub
我去查了下
pointerleave
和pointerout
的这两个事件的区别,的确应该在完全离开所有元素的时候才执行。
pointerleave:
- 不会冒泡。
- 仅当指针完全离开元素及其所有子元素时触发。
- 只在完全离开时触发一次。
pointerout:
- 会冒泡。
- 当指针离开元素本身,或进入其子元素时都会触发。
- 可能触发多次。
先入为主一直围绕out事件了,后面发现还有leave事件,后面自己去查了才发现两者的区别。
behaviors: [ "hover-activate"] 监听onHoverEnd, 在鼠标移出label的时候会触发,这个时候hover的样式还没移除,onHoverEnd的event.type 是pointerout 这里onHoverEnd的机制应该是和pointerleave一致才对,event.type 应该是 pointerleave 这样监听和state才是一致的
Originally posted by @liuzhong0117 in https://github.com/antvis/G6/issues/6292#issuecomment-2337318267
预期行为:
onHoverEnd
应该在鼠标完全离开元素时触发。- 触发时,hover 样式应该已经被移除。
event.type
应该是 'pointerleave'。
实际行为:
onHoverEnd
在鼠标移出 label 时就触发了。- 触发时,hover 样式还没有被移除。
event.type
是 'pointerout'。
问题分析:
- 'pointerout' 和 'pointerleave' 的行为是不同的。
- 'pointerout' 在鼠标移出元素或其子元素时都会触发。
- 'pointerleave' 只在鼠标完全离开元素时触发。
建议改进:
onHoverEnd
的触发机制应该与 'pointerleave' 一致。event.type
应该是 'pointerleave'。- 这样可以确保监听行为和状态变化保持一致。