我正在开发一个力导向图布局,并添加了一些功能:可选择的链接/节点、工具提示、鱼眼效果以及 - 对于我的问题非常重要的 - 缩放和平移。
现在,缩放功能的效果非常好,如下所示:
d3 ... .append('svg:g').call(d3.behavior.zoom().on("zoom", redraw))...
重新绘制函数如下所示...
function redraw() {
trans = d3.event.translate;
scale = d3.event.scale;
vis.attr("transform", "translate(" + trans + ")" + " scale(" + scale + ")");
}
然而,这种方法会缩放整个SVG图形,包括字体大小、图形边缘、围绕节点的线条宽度等。
是否有一种方法可以不缩放某些元素?到目前为止,我看到的唯一解决方案是像这样加一行代码(从这里获取:http://jsfiddle.net/56RDx/2/)
node.attr("font-size", (nodeFontSize / d3.event.scale) + "px");
在重绘方法中,基本上是动态反转某些元素的缩放。然而我的问题是(除了这个丑陋的解决方法),我的边宽是根据图形属性在图形绘制时动态生成的,因此这种“反转”方法不起作用...
scale()
设置为较小的值呢? - A.M.K