js中的单节点bug

Single node bug in Arbor.JS

本文关键字:节点 bug 单节点 js      更新时间:2023-09-26

当创建一个带有单个节点的普通Arbor JS图时,节点到处抖动,并且不能添加其他节点。

另一个用户也在这里报告了这个问题:

https://github.com/samizdatco/arbor/issues/12

非常感谢您的帮助修复/解决方法

这不是一个真正的修复,但我计算节点的数量,如果少于1,我设置摩擦为1.0

if (nodeCount == 1) {
   //Stop single nodes bouncing all over the place
   sys.parameters({ friction: '1.0' });
}

使用d3.js库代替Arbor已经解决了我的问题:-)

我们使用了一个变通的解决方案。它可能更像是一个hack而不是一个完整的解决方案,但它很容易实现并且在大多数情况下工作良好。

我们所做的是每次增加或减少一个粒子时,我们确定系统中粒子的数量。如果这个计数等于1,我们在系统中添加一个新粒子,其颜色设置为画布背景色。由于节点的颜色与其背景相同,所以它是不可见的。

所以在图中没有一个节点。每当由于添加或删除而发生这种情况时,我们都会添加这个隐藏的平衡节点。你可以看看我们的网站,看看上面的一个实例:http://www.graphthinker.com。当您添加节点时,您可能会看到,即使图形只有一个(可见的)节点,它也会继续响应。

这个隐藏的平衡节点可以在不再需要它的时候被删除,比如当另一个节点被添加时,或者当唯一可见的节点被删除时。

另一种选择是将physics.js文件替换为此文件。它有几个修复程序来补偿使用单个节点的问题(包括添加第二个节点的问题)。

try this

if (nodeCount == 1) {
            sys.parameters({ repulsion: 10, gravity: false, dt: 0.035 })
        }
        else if (nodeCount > 1 && nodeCount < 30) {
            sys.parameters({ repulsion: 1000, gravity: false, dt: 0.35 })
        }
        else {
            sys.parameters({ friction: .1, stiffness: 0.1, repulsion: 1, gravity: false, dt: 0.035 })
        }