完成:
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/。或者如果你想使用平移+縮放你必須調整邊界的比例+平移值 –