選択可能なリンク/ノード、ツールチップ、魚眼効果、そして-私の質問にとって重要な-ズームとパンなど、いくつかの追加機能を備えた力指向グラフレイアウトに取り組んでいます。
これで、ズームは次のように非常にうまく機能します。
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");
再描画メソッドでは、基本的に特定の要素のズームをオンザフライで反転します。ただし、私の問題は(これが醜いハックであることを除けば)、グラフ描画時にエッジ幅が動的に生成されるため(一部のグラフプロパティに従って...)、この「反転」メソッドが機能しないことです...