这里有个问题

d3.js: pan with limits

回答限制锅具移动的问题。但这使用轴,而我没有。

我所拥有的是一个力图,它具有平移和缩放的能力。

现在,我使用来限制缩放:

.call(d3.behavior.zoom().on("zoom", redraw).scaleExtent([0.8, 2]))


我想知道如何限制该图的平移,以免将网络/图拖到视口之外。

(网络可能会更改大小,具体取决于导入的JSON文件,因此我无法使用确切数字)

inner.attr("transform","translate(" + d3.event.translate + ")" + " scale(" + d3.event.scale + ")");

最佳答案

没有等效的zoom.extent。不过,您可以在重绘功能中使用最小和最大覆盖缩放的平移。例如,如果要限制缩放以使其原始位置保持在500px以内:

function redraw() {

 var oldT = yourZoom.translate()
 var newT = [0,0]
 newT[0] = Math.max(-500,oldT[0]);
 newT[0] = Math.min(500,oldT[0]);
 newT[1] = Math.max(-500,oldT[0]);
 newT[1] = Math.min(500,oldT[0]);
 yourZoom.translate(newT);

//The rest of your redraw function, now using the updated translate on your zoom

}

10-02 15:55