完成:
node.attr("transform", function(d) {
//Here i create a node radius so it doesnt go offscreen
var nodeRadius = d.weight * 2 + 12
//here I do checks to see if it goes offscreen
if(d.x<= nodeRadius){
d.x = nodeRadius;
}
if(d.y<= nodeRadius){
d.y = nodeRadius;
}7
if(d.x>width - nodeRadius){
d.x = width - nodeRadius;
}
if(d.y>height - nodeRadius){
d.y = height - nodeRadius;
}
return "translate(" + d.x + "," + d.y + ")";
});
这在tick function
完成的,所以它会检查每一帧。我创建了一个实际的滴答函数,因此它是可重用的。请检查我的JSFiddle中的更改,因为我已经做了很多。但一切似乎都很好。
更新小提琴:http://jsfiddle.net/aVhd8/177/
如果你想开始之前那么边界必须记住,移动到移动节点:
node.attr("transform", function(d) {
//Here i create a node radius so it doesnt go offscreen
var nodeRadius = d.weight * 2 + 12
//here I do checks to see if it goes offscreen
if(d.x<= nodeRadius-movement){ //have to take movement away as you have moved the nodes/links previously
d.x = nodeRadius-movement;
}
if(d.y<= nodeRadius){
d.y = nodeRadius;
}
if(d.x>width - nodeRadius-movement){
d.x = width - nodeRadius-movement;
}
if(d.y>height - nodeRadius){
d.y = height - nodeRadius;
}
return "translate(" + d.x + "," + d.y + ")";
});
注意这里我已经把movement
考虑。您还需要对各环节上做到相同的:
的jsfiddle:http://jsfiddle.net/aVhd8/180/
HI AJ你是天才:)。但是当我把节点放在中心时会发生什么。希望你记得在给定的链接--- http://jsfiddle.net/fekkyDev/aVhd8/174/ – fekkyDEV
完成之后,你所需要做的就是将移动变量考虑进去。我不能强调你需要了解你的代码在做什么的事实。我注意到你在这里提出的问题很简单,如果你考虑逻辑在做什么。在这里例如,你想在开始时移动你的节点?所以你把翻译功能。但是在你的tick函数中你的边界从这个点开始工作,节点没有考虑前面的翻译。希望这有助于:) –
对不起,我刚刚重读了这个问题。@ Rouby只是取消了SVG缩放调用的注释,然后你就可以缩放/平移。与此相关的问题是,当您平移您改变力布局的视图时,在您移动SVG时,在tick函数中创建的边界将关闭。调用缩放而不是缩放和平移时,您可以通过缩放来解决此问题。这个问题的另一个问题是规模不会发挥作用:http://jsfiddle.net/aVhd8/182/。或者如果你想使用平移+缩放你必须调整边界的比例+平移值 –