G6
G6 copied to clipboard
关闭animate属性,node:dragstart事件中使用addChild(),会导致node:drag事件失效
问题描述
当 animate为false, 在node:dragstart事件中使用addChild(),会导致node:drag以及相关拖拽事件失效,无法完成node的拖拽。
重现链接
https://codesandbox.io/s/g6-drag-appchild-xc07ri?file=/index.html
重现步骤
1.目前使用TreeGraph,不想用到animate,设置animate:false;
-
在node:dragstart中,使用addChild()在想要的位置添加子节点引导用户修改结构;
-
addChild成功以后,会导致后续的node:drag事件失效,无法拖拽node节点;
-
设置animate: true,拖拽正常。
预期行为
期望 animate:false 也能正常拖拽;
平台
- 操作系统: macOS
- 网页浏览器: Google Chrome 103.0.5060.134
- G6 版本: 4.6.15
屏幕截图或视频(可选)
No response
补充说明(可选)
No response
因为 addChild 会触发 changeData 和重新渲染,相当于所有元素是被销毁重新创建的,所以一开始接收 dragstart 的节点对象实际上被销毁了,当前看到的是新的一个对象,因此继续拖拽并不会作用在新的对象上。
想了一下没有找到比较好的解法,如果把创建虚线节点这一步放在 node:mouseenter 里面,在 node:mouseleave 和 node:dragend 里面去删除,这样是可以满足需求的吗?相当于 addChild 引发的元素销毁重建不会发生在 drag 的过程中,dragstart drag dragend 始终作用在重绘之后的新节点上
尊敬的用户,您好。我们很重视您的 issue,但由于长时间没有答复,我们暂时认为这个问题已经解决。如果还有任何问题,请随时根据 issue 模版再开启新的 issue。