的左上角我有力量的布局,定义如下节点...D3力布局节点总是在开始屏幕
nodes = someData.map(function (d) {
return {
image_location: d.image_location,
image_width: d.image_width,
image_height: d.image_height,
aspect_ratio: d.aspect_ratio,
radius: circleRadiusScale(d.someCount),
x: width/2,
y: height/2,
px: width/2,
py: height/2,
cx: width/2,
cy: height/2
};
});
然后被用在后面的代码产生的力布局...
force = d3.layout.force()
.gravity(.05)
.alpha(0.1)
.size([width, height])
.on("tick", tick);
force.nodes(nodes)
.start();
我强迫X/Y的原因,PX/PY,CX/CY值是我只是想确保节点不总是从左上角投影浏览器(这是只有一秒钟,直到强制模拟生效,但是非常明显,特别是在Firefox或移动开发冰)。
我觉得很奇怪的是,我在我写的代码加入了我的x/y,cx/cy,px/py值之前开始了布局,换句话说,这个代码来定义后/启动力布局...
node = svg.selectAll(".node")
.data(force.nodes(), function(d) { return d.id; })
.enter()
.append("g")
.attr("class", "node") etc to append circles, images...
所以我不知道如何通过浏览器忍住节点的投影,直到我知道力布局的初始位置除0,0之外的东西。感谢您的任何想法!
感谢拉尔斯 - 这是固定的完全的问题 - 只需要确保1个滴答发生了什么我绘制之前任何圈子,图像等页面上。 – d3wannabe
在这种情况下,您甚至可以在启动之后和添加处理程序之前调用'force.tick()'。 –