SVG:在textPath末尾右对齐文本

时间:2015-10-09 02:19:07

标签: html svg

我想在textPath的末尾右对齐文本:

<svg height="300" width="400">
    <defs>
        <path id="myTextPath" d="M30,160  A175,175 0 0,1 370,160" />
    </defs>
    <path d="M30,160  A175,175 0 0,1 370,160" style="stroke: black; stroke-width:1; fill:none;" />
    <g fill="black" stroke="none">
        <text x="0%" y="0" text-anchor="start">
            <textPath xlink:href="#myTextPath">Start</textPath>
        </text>
        <text x="50%" y="0" text-anchor="middle">
            <textPath xlink:href="#myTextPath">Middle</textPath>
        </text>
        <text x="100%" y="0" text-anchor="end">
            <textPath xlink:href="#myTextPath">End</textPath>
        </text>
    </g>
</svg>

你可以在这里看到这个:http://jsfiddle.net/7sqdxw11/

开始文字从我期望的位置开始 - 在textPath的开头。

但是,结束文本的结尾远远低于textPath的结尾。

中间也非常害羞于textPath的中间位置。)

以下是截图:

enter image description here

我做错了什么?如何让结束结束在textPath弧的右端?

1 个答案:

答案 0 :(得分:4)

在SVG百分比坐标中,通常是指SVG的宽度,或者在某些情况下是父对象的宽度。

因此,在您的示例中,“100%”将导致值为400px - SVG的宽度。但是你的路径实际上有466的长度。你可以通过实验或使用一些Javascript获得长度:

var len = document.getElementById("myTextPath").getTotalLength();

因此,如果您将“100%”更改为“466”,您将获得所需的效果。

<svg height="300" width="400">
    <defs>
        <path id="myTextPath" d="M30,160  A175,175 0 0,1 370,160" />
    </defs>
    <path d="M30,160  A175,175 0 0,1 370,160" style="stroke: black; stroke-width:1; fill:none;" />
    <g fill="black" stroke="none">
        <text x="0" y="0" text-anchor="start">
            <textPath xlink:href="#myTextPath">Start</textPath>
        </text>
        <text x="233" y="0" text-anchor="middle">
            <textPath xlink:href="#myTextPath">Middle</textPath>
        </text>
        <text x="466" y="0" text-anchor="end">
            <textPath xlink:href="#myTextPath">End</textPath>
        </text>
    </g>
</svg>