【问题标题】:Reset link strength D3 force重置链接强度 D3 force
【发布时间】:2019-04-02 13:55:08
【问题描述】:

我有一个小提琴:https://jsfiddle.net/mvLf579a/284/

此小提琴允许您使用 D3 径向布局布置力网络,并将布局重置为默认力布局。但是,重置时链接强度似乎无法正常工作。

这是径向函数:

function radial() {
  simulation
    .force("charge", d3.forceCollide().radius(10))
    .force("r", d3.forceRadial(function(d) {
    return 100
        return d.id < 5 ? 100 : 200;
      }, width / 2, height / 2).strength(function(d) {
      return 1
        // set radial force to 0 if it has the id we're looking for
        if(d.id == 3) return 0
        // otherwise keep the strength at 1
        else return 1
      })
    )
    // turning off previously set forces
    //.force('link', null)
    .force('x', null)
    .force('y', null)

  simulation.alpha(1).restart()
    }

这里是重置功能:

function reset(){
simulation
  .force("link", d3.forceLink()
    //.id(function(d) {return d.id;})
    .strength(1))
  .force("charge", d3.forceManyBody())
  .force('x', d3.forceX(width / 2))
  .force('y', d3.forceY(height / 2))
  .force('r', null)

  simulation.alpha(1).restart()

}

我认为使用以下行会重置链接和链接强度:

  .force("link", d3.forceLink().strength(1))

如果你打开小提琴,拖动链接的节点,他们会用它拖动其他节点。 (请记住,我已经复制了数据,所以有时当您拖动一个节点时,它会拖动另一个节点。

然后按'radial',这将把它们布置在径向布局中。

然后按'reset',这应该会回到它的启动方式,但它似乎不起作用。

感谢任何帮助,谢谢

【问题讨论】:

  • 你不对节点的位置做任何事情,所以当你按下 reset 时它们从它们所在的位置开始,所以你的对象不同于 initial 运行
  • @riov8 抱歉,也许我没有解释。力回来了,但是当我拖动时链接没有强度,所以拖动节点时它不会拖动连接的节点

标签: javascript d3.js


【解决方案1】:

您不能添加新的链接力,而是修改现有的链接力

function reset() {
  simulation.force("link").strength(1);
  simulation
    // .force("link", d3.forceLink()
    //   //.id(function(d) {return d.id;})
    //   .strength(1))
    .force("charge", d3.forceManyBody())
    .force('x', d3.forceX(width / 2))
    .force('y', d3.forceY(height / 2))
    .force('r', null)

  simulation.alpha(1).restart()
}

【讨论】:

    猜你喜欢
    • 2013-04-27
    • 2017-03-15
    • 2015-05-23
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 2017-03-15
    相关资源
    最近更新 更多