如何从springy.js和raphael中完全删除边缘?

时间:2017-01-30 00:27:15

标签: javascript raphael springy.js

我尝试使用springy和raphael进行javascript应用程序。 事实上我分叉了demo-raphael.html(可从官方弹性代码获得) https://github.com/dhotson/springy/blob/master/demo-raphael.html

我要做的是拥有2个主节点A和B以及10个其他节点(C,D,E,...)。 这10个节点可以连接到A或B.(但不能同时连接两个) 如果我选中某个复选框,某个节点可以更改其连接并转到另一个主节点。

所以我所做的似乎是有效的,除了她之间的排列,例如A和C之间没有被删除。 更新复选框后,我会运行:

我认为A连接到C,我想断开它并将B连接到C.让我们调用EC这个边缘。 所以我做了

graph_removeEdge(EC);
delete EC;
EC = graph.newEdge(C, B, {color: '#00A0B0'});

代码似乎有效,因为B和C已连接,A和C不再存在。 但是我仍然可以看到A和C之间的线条的旧图片(它不再移动,但它仍然存在)

如何删除?

我也试图不删除并创建此EC边缘,但尝试通过更改其目标节点来更新它,但没有任何反应。 代码:

EC.target = B; 

还有一个问题是如何在A和B之间设置最大距离。 因为它们可以非常接近。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

好的,我遇到了问题: springy正在创建节点和边缘,但它也会创建与此边缘关联的raphael路径。 所以在销毁边缘之前必须删除此路径

EC.connection.fg.remove();
graph_removeEdge(EC);

注意:关于在A和B之间设置最大距离的第二个问题:由于A和B之间没有链接,因此无法在springuy库中进行修改,因此我们无法设置距离。 唯一的解决方案是为每个节点添加一个标志,然后将分发具有此标志的节点。当然,这必须通过springuy.js中的修改来实现,可能在这个函数中:

Layout.ForceDirected.prototype.tick = function(timestep) {
    this.attractToCentre();
    this.applyHookesLaw();
    this.applyCoulombsLaw();
    this.applyDistanceToFlaggedNode(); // <--- your new function
    this.updateVelocity(timestep);
    this.updatePosition(timestep);
};