D3を使用してグラフ表示プログラムを作成していて、Microsoft Edgeがエッジスケーリングを正しく処理できないという問題が見つかりました。私のコードは以下の通りです:エッジがスケーリングとテキストアンカーを処理しない:svgで正しく中間
HTML:
<svg id="container" width="200" height="200">
<g id="inner-container">
</g>
</svg>
JS:Google Chromeの、IE、およびFirefoxで
var container = d3.select("#container");
var innerContainer = container.select("g");
container.call(d3.behavior.zoom().scaleExtent([.5,4]).on("zoom", function(){
innerContainer.attr("transform", "translate(" + d3.event.translate + ") scale(" + d3.event.scale + ")");
}));
var nodes = innerContainer.append("g").selectAll(".graph-node");
var labels = innerContainer.append("g").selectAll(".graph-label");
var data = ["A", "B", "C", "D", "E"];
nodes.data(data).enter().call(function (selection){
selection = selection.append("g");
selection.attr("class", ".graph-node");
selection.attr("transform", function(d, i){
return ["translate(", (i * 20).toString(), " ", (i * 20).toString(), ")"].join("");
});
selection.append("rect")
.attr("width", 20)
.attr("height", 20)
.attr("rx", 2).attr("ry", 2)
.attr("fill", "red");
selection.append("text")
.text(function(d){ return d; })
.attr("text-anchor", "middle")
.attr("x", 10).attr("y", 15)
.style("fill", "white");
});
labels.data(data).enter().call(function (selection){
selection = selection.append("g");
selection.attr("class", "graph-label");
selection.append("text")
.text(function (d) { return "Node" + d; });
selection.attr("transform", function (d, i) {
return ["translate(", (i * 20 + 25).toString(), " ", (i * 20 + 15).toString(), ")"].join("");
});
});
、期待どおりに作品をズーム。ただし、Microsoft Edgeでこのコードを実行すると、ノードの上にあるテキストラベルがズームすると右に移動し、四角形を離れるときに完全に消えます。 text-anchor
を設定しないと問題が解消されますが、これは手動でテキストの位置を考慮する必要があることを意味します。特にサイトが国際的に使用されている場合は考慮してください。 (テキスト文字自体は、最終製品のカスタムフォントからのものなので、問題はありません)。
この問題を回避するにはどうすればいいですか?センタリングされたテキストラベルを提供しても、Edgeで正しく表示されますか?