我发现所有这样的内容都要改变cx,cy
:
.attr("cx", function(d) {var x... return x; })
.attr("cy", function(d) {var y... return y; })
但是我有一个函数F(x,y)
,它返回{X:value, Y:value}
。
由于此F
函数的计算成本很高,我无法将其调用两次。
我需要这样的东西:
node.attr("[cx,cy]", function(d){ return F(d.x,d.y) }
只需为每个节点设置cx
和cy
调用函数F
一次。
它在功能tick()
中。我认为node.attr(...)
会自动调用每个节点的函数,这就是为什么我不能在F
行之前执行函数node.attr(...)
。
有没有办法做到这一点?
答案 0 :(得分:1)
您可以预先计算一次值并将其存储在数据对象中:
data.forEach(function (d) {
var result = F(d.x, d.y);
d.computedX = result[0];
d.computedY = result[1];
});
然后是:
node.attr("cx", function(d) { return d.computedX; })
.attr("cy", function(d) { return d.computedY; })