うーん。TSPAN を使用して SVG テキストを動的にラップする方法を理解したので ( SVG テキストの自動行ラップ を参照)、それをアニメーション化しようとして困惑しました。Mike Bostock の Zoomable Treemap の例に基づいています。
私のテキストラッピングコードは次のように呼び出されます:
g.append("text")
.attr("dy", ".75em")
.text(function(d) { return d.name; })
// .call(text) // Mike's line
.each(function (d,i) { // My line
wraptorect(this,this.previousSibling,6,2,2);
});
古い Mike 行を元に戻すと問題なく動作しますが、テキストの折り返しは削除されます。
function text(text) {
text.attr("x", function(d) { return x(d.x) + 6; })
.attr("y", function(d) { return y(d.y) + 6; });
}
親の TEXT 要素をアニメーション化する必要があるだけだと思っていましたが、Chrome でテキストが奇妙な方向に移動しています (さらに、IE9 では、テキストがまだ折り返されたくない場合にさらに悪い動作になります)。x属性を持つTSPANに関係していると思われますが、それ以上の道は見えません...
単線
<text dy=".75em" x="252" y="2">Other purposes which could be interesting</text>
折り返し線
<text dy=".75em" x="252" y="2">
<tspan x="252" dy="15">Other purposes </tspan>
<tspan x="252" dy="15">which could be </tspan>
<tspan x="252" dy="15">interesting </tspan>
</text>
JS コードは非常に長いので、フィドル リンクは次のとおりです: http://jsfiddle.net/gHdR6/6/