Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
neolee6053 opened this issue Jun 8, 2023 · 4 comments
Closed

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

neolee6053 opened this issue Jun 8, 2023 · 4 comments

Comments

@neolee6053
Copy link

neolee6053 commented Jun 8, 2023

问题描述

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

重现链接

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

重现步骤

node本应该跟着鼠标移动的

预期行为

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

平台

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

屏幕截图或视频(可选)

No response

补充说明(可选)

No response

@pomelo-nwu
Copy link
Member

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

@Yanyan-Wang
Copy link
Contributor

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

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

@neolee6053
Copy link
Author

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

@xiangguoFFF1
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants