antvis/G6

【BUG】The trigger mechanism of the onHoverEnd event does not match expectations #6303

resetsix posted onGitHub

我去查了下pointerleavepointerout的这两个事件的区别,的确应该在完全离开所有元素的时候才执行。

  • pointerleave:

    • 不会冒泡。
    • 仅当指针完全离开元素及其所有子元素时触发。
    • 只在完全离开时触发一次。
  • pointerout:

    • 会冒泡。
    • 当指针离开元素本身,或进入其子元素时都会触发。
    • 可能触发多次。

先入为主一直围绕out事件了,后面发现还有leave事件,后面自己去查了才发现两者的区别。 image

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'。
  • 这样可以确保监听行为和状态变化保持一致。

Fund this Issue

$0.00
Funded

Pull requests