【问题标题】:How to set d3.layout.force.charge once d3.layout.force has already been initialized?一旦 d3.layout.force 已经初始化,如何设置 d3.layout.force.charge?
【发布时间】:2014-03-01 23:15:21
【问题描述】:

我想做的是onClick,改变电荷,使节点被更高的力排斥,但这不起作用:

var force = d3.layout.force()
    .gravity(.05)
    .charge(function(d, i) { return i ? 0 : -2000; })
    .nodes(nodes)
    .size([w, h]);

svg.on("click", function() {
  force = force.charge(function(d, i) { return i ? 0 : -10000; })
  window.setTimeout(function() {
  force = force.charge(function(d, i) { return i ? 0 : -2000; })
  },3000);
});

【问题讨论】:

    标签: javascript d3.js force-layout


    【解决方案1】:

    您所要做的就是调用 force.start ,它会再次遍历声明的节点并更改它们的电荷和其他属性。

    svg.on("click", function() {
      force = force.charge(function(d, i) { return i ? 0 : -50000; })
      force.start()
      window.setTimeout(function() {
      force = force.charge(function(d, i) { return i ? 0 : -2000; })
      force.start()
      },3000);
    });
    

    【讨论】:

    • 你很快就明白了。请注意,从技术上讲,您应该致电 force.restart()
    • 没有 force.restart() 方法,但如果你的意思是 force.resume(),那并不能解决我的问题。
    • 很好,是的,应该是.resume()。好吧,如果这在这种情况下不起作用......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 2023-04-06
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多