【问题标题】:D3js force layout update nodes and linksD3js 强制布局更新节点和链接
【发布时间】:2015-12-04 22:10:54
【问题描述】:

我的目标 - 我试图在拖动节点后将计算的 [x,y] 给节点,以便节点根据我计算的内容而不是放置位置占据位置。

相关例子—— 我已经看到了在 forcelayout 中更新节点和链接的示例。比如说,

https://gist.github.com/mbostock/1095795

http://bl.ocks.org/mbostock/1095795

我的方法(不起作用)-

在我的情况下,要求与上面的示例略有不同。拖动节点后(我做了一个 force.stop() 以避免强制布局接管拖动节点的位置分配),我根据节点的放置位置将节点重新分配给不同的 [x,y]。给它一个 d.fixed。完成此操作后,我更新我的节点。节点占据计算出的 [x.y] 位置,而不是它被丢弃的位置。到这一步,一切都好。

但是,在其他节点的后续拖动中(即 drag.resume() 自动启动时),在上一步中拖动的节点占据 [x,y] 是基于它之前被放置的位置,而不是基于我计算的 [x,y] 在上一步的拖动结束时很好地占据了它。

我认为强制布局没有更新节点和链接。所以我用新的节点和链接更新了力布局,如下所示,

force.nodes(newNodes) .links(新链接) .start();

我在 mouseup.drag 中这样做

仍然无法正常工作,感谢任何帮助。谢谢

【问题讨论】:

  • 你需要在这里给我们看一些代码。
  • 请在下面找到小提琴的链接。 jsfiddle.net/lkanikka/Lymtedrq 为简单起见,我将一个节点拖放后,放在[10,10]中。在实际的例子中,它是不同的。放置节点后,拖动结束后,我拖动另一个节点。我之前拖动的节点移回 [xy] ,这是它被丢弃的位置,而不是 [10,10] (计算的 [x,y] )......看起来像它所在的 [x,y] drop 存储在力布局中。如何用 new [x,y] 更新 forcelayout ?我已经在 mouseup 中更新了图形数组并执行了 force.start()。它没有工作......
  • 你需要设置pxpy属性以及jsfiddle.net/Lymtedrq/1
  • 谢谢...它有效!

标签: d3.js data-visualization


【解决方案1】:

设置位置时,需要设置pxpy 属性,这些属性也是布局内部使用的。更改(和简化)示例here

【讨论】:

    猜你喜欢
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多