首页 > 解决方案 > 删除几个节点后的 D3 SVG 过渡问题

问题描述

我在这个jsfiddle中遇到了一个奇怪的问题。如果我删除几个现有节点并稍后添加新节点,则节点的转换不会保持不变。

这种情况工作正常

  1. 运行jsfiddle。
  2. 点击reset按钮
  3. 选择ctee连接到其他几个节点的节点并拖动。
  4. 所有连接的节点都应跟随主拖动节点。
  5. 查看以下屏幕截图,连接到节点的ctee节点也随着ctee.

连接的节点与主节点一起移动

这种情况有一个问题(唯一的区别是我们要先删除一个节点,然后单击reset按钮):

  1. 运行jsfiddle。
  2. 右键单击GW节点并选择选项Stop
  3. 这将从屏幕上删除节点。
  4. 现在点击reset按钮
  5. 选择ctee连接到其他几个节点的节点并拖动。
  6. 理想情况下,所有连接的节点都应该跟随主拖动节点,但它不起作用。连接的节点保持在其原始位置。
    1. 查看以下屏幕截图,连接到节点的ctee节点没有随着ctee.

拖动节点时连接的节点不移动

标签: javascriptd3.js

解决方案


问题看起来像当您删除一个节点时,您正在创建一个links与您的强制布局不同步的新引用:

links = links.filter...

要解决此问题,您只需将:添加force.links(links);到它之后的行以更新强制布局的引用。

更新小提琴:https ://jsfiddle.net/r1tcj0mf/16/


推荐阅读