2013-10-10 101 views
3

是否可以在d3.js中调整力布局的大小?例如,我有调整D3力布局

var force = d3.layout.force() 
.nodes(documents.nodes) 
.linkDistance(0) 
.friction(.2) 
.size([width, height]); 

force.start(); 

定义的布局,我希望在项目后期调整其大小。这可能吗?

+1

你试过重置'.size()'吗? –

+0

我试过'force.size([newWidth,height])。start();'无效... – cjweave2

+0

请注意,增加布局的大小并不意味着会使用额外的空间。你的具体用例是什么? –

回答

3

根据the documentation,力布局的.size()参数仅影响节点的重心和初始分布的重心,而不影响可用空间。您必须自己执行任何约束,例如在tick功能:

force.on("tick", function() { 
    node.attr("cx", function(d) { return Math.min(maxX, Math.max(minX, d.x)); }) 
     .attr("cy", function(d) { return Math.min(maxY, Math.max(minY, d.y)); }); 
} 
4

不久,在一个调整大小事件,你应该改变你的SVG对象的属性(也改变重心)和恢复力的计算:

window.onresize = function() { 
    width = window.innerWidth, height = window.innerHeight; 
    svg.attr('width', width).attr('height', height); 
    force.size([width, height]).resume(); 
}; 

调整大小的示例为provided here