嗯。既然我已经弄清楚了如何使用 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/