G6 icon indicating copy to clipboard operation
G6 copied to clipboard

关闭animate属性,node:dragstart事件中使用addChild(),会导致node:drag事件失效

Open fanggz2017 opened this issue 1 year ago • 1 comments

问题描述

当 animate为false, 在node:dragstart事件中使用addChild(),会导致node:drag以及相关拖拽事件失效,无法完成node的拖拽。

重现链接

https://codesandbox.io/s/g6-drag-appchild-xc07ri?file=/index.html

重现步骤

1.目前使用TreeGraph,不想用到animate,设置animate:false;

  1. 在node:dragstart中,使用addChild()在想要的位置添加子节点引导用户修改结构;

  2. addChild成功以后,会导致后续的node:drag事件失效,无法拖拽node节点;

  3. 设置animate: true,拖拽正常。

预期行为

期望 animate:false 也能正常拖拽;

平台

  • 操作系统: macOS
  • 网页浏览器: Google Chrome 103.0.5060.134
  • G6 版本: 4.6.15

屏幕截图或视频(可选)

No response

补充说明(可选)

No response

fanggz2017 avatar Aug 08 '22 07:08 fanggz2017

因为 addChild 会触发 changeData 和重新渲染,相当于所有元素是被销毁重新创建的,所以一开始接收 dragstart 的节点对象实际上被销毁了,当前看到的是新的一个对象,因此继续拖拽并不会作用在新的对象上。

想了一下没有找到比较好的解法,如果把创建虚线节点这一步放在 node:mouseenter 里面,在 node:mouseleave 和 node:dragend 里面去删除,这样是可以满足需求的吗?相当于 addChild 引发的元素销毁重建不会发生在 drag 的过程中,dragstart drag dragend 始终作用在重绘之后的新节点上

Yanyan-Wang avatar Aug 19 '22 08:08 Yanyan-Wang

尊敬的用户,您好。我们很重视您的 issue,但由于长时间没有答复,我们暂时认为这个问题已经解决。如果还有任何问题,请随时根据 issue 模版再开启新的 issue。

Yanyan-Wang avatar Nov 29 '22 09:11 Yanyan-Wang