Как установить d3.layout.force.charge, как только d3.layout.force уже инициализирован?

То, что я хочу сделать, это 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);
});
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);
});

licensed under cc by-sa 3.0 with attribution.