2013-10-10 2 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에 따르면, 강제 레이아웃의 매개 변수는 사용 가능한 공간이 아닌 노드의 무게 중심 및 초기 분포에만 영향을줍니다. 당신은 자신에 대한 제약을 강요해야합니다. 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

곧, resize 이벤트에 당신은 당신의 SVG 개체의 속성을 변경 (그것은 또한 무게 중심을 변경) 및 힘의 계산을 다시 시작해야합니다

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

d3 force의 예는 provided here입니다.

관련 문제