antvis/G6

当移动nodes 时,会不稳定的跳来跳去 #4609

neolee6053 posted onGitHub

问题描述

node本应该跟着鼠标移动的,但不知为什么会不安定的跳来跳去 test

重现链接

https://codesandbox.io/s/g6-p6fq42?file=/index.js

重现步骤

node本应该跟着鼠标移动的

预期行为

node本应该跟着鼠标移动的,但不知为什么会不安定的跳来跳去

平台

  • 操作系统: [ Windows ...]
  • 网页浏览器: [Google Chrome]
  • G6 版本: [4.8.15 ]

屏幕截图或视频(可选)

No response

补充说明(可选)

No response


@neolee6053 移动node时候,全局的节点会进行force的重新计算,如果拖拽的节点质量比较小,就会受到力的作用而发生位移。可以尝试增加 被拖拽节点的质量

posted by pomelo-nwu almost 2 years ago

原因是在你的 demo 中 dragstart 调用了 graph.layout 相当于重新启动了力导布局,这时候拖动节点,和布局过程中计算的节点位置不停相互覆盖,看起来有跳动。如果你拖动的时候不希望其他节点跟随,就不需要在 drag 各种监听里面加 graph.layout。 如果你希望拖拽完成之后跟随,避免拖拽过程中的位置冲突导致的跳动,可以在 dragstart 的时候把 force 布局停止调,dragend 的时候再触发重新布局,我按照这个逻辑改了一下:https://codesandbox.io/s/g6-forked-2qhxtp

另外,除了 force 以外其他布局是没有 forceSimulation.stop 的,可以注意下

posted by Yanyan-Wang almost 2 years ago

谢谢建议,大大的建议是可以接受的,但暂时没办法根绝吗?version 5也不能? 比如类似 https://visjs.github.io/vis-network/examples/network/exampleApplications/lesMiserables.html

posted by neolee6053 almost 2 years ago

@Yanyan-Wang 大佬如果是在拖拽过程中,node:drag 事件里面想要保持其余节点跟随(drag事件中使用了graph.layout),有什么办法可以避免像你说的 "和布局过程中计算的节点位置不停相互覆盖,看起来有跳动" 这种情况吗

posted by xiangguoFFF1 4 months ago

Fund this Issue

$0.00
Funded

Pull requests