如何获取 SVG tspan 元素的宽度

发布于 2024-10-23 19:55:30 字数 844 浏览 1 评论 0原文

我试图获取 SVG 中 tspan 元素(位于 text 元素内部)的渲染宽度。

这是我的标记:

<text>
    <tspan>Value 1</tspan>
    <tspan>Value 2</tspan>
</text>

从视觉上看,我希望值 1 向左浮动,而值 2 向右浮动,以便多个元素将这样对齐:

Value 1                                                                   Value 2
Value 10                                                                 Value 20
Value 100                                                               Value 200
Value 1000                                                             Value 2000

因为我想要 tpsan 的宽度(“值 1 "/"value 2") 而不是文本元素,我无法使用 getBBox(),因为该方法不适用于 tspan 元素。

奇怪的是,使用 jQuery 的 width() 方法将在 Chrome 中返回正确的值,但在 Firefox 中返回 NaN。任何想法将不胜感激。

I'm trying to get the rendered width of a tspan element (located inside a text element) in SVG.

This is my markup:

<text>
    <tspan>Value 1</tspan>
    <tspan>Value 2</tspan>
</text>

Visually, I want value 1 to float left, while value 2 floats right, so that a multiple elements will align as such:

Value 1                                                                   Value 2
Value 10                                                                 Value 20
Value 100                                                               Value 200
Value 1000                                                             Value 2000

Since I want the width of the tpsan ("value 1"/"value 2") and not the text element, I can't use getBBox(), as that method doesn't apply to tspan elements.

Oddly enough, using jQuery's width() method will return the correct value in Chrome, but returns NaN in Firefox. Any ideas would be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

み零 2024-10-30 19:55:30

尝试多种解决方案后,我发现 getCompulatedTextLength 是获取的最准确方法svg tspan 的宽度。它也得到了很好的支持,并且在不同浏览器上的行为方式相同。我还发现获取 tspan 高度的最佳方法就是读取 font-size 属性。

After trying multiple solutions I found getComputedTextLength to be the most accurate way to get the width of an svg tspan. It is also well supported and behaves the same way on different browsers. I also found that the best way to get the height of a tspan is simply to read the font-size attribute.

夏日浅笑〃 2024-10-30 19:55:30

您可以使用 getBoundingClientRect() 来查找tspan 的屏幕空间边界框。我已经测试过,发现它可以在 Safari v5.0.4、Firefox 3.6 和 4.0RC 以及 Opera 11 中运行。但是,它 Chrome 失败、v10.0.648.151 和 v11.0.696.14。 (它返回一个所有值都设置为 0 的 ClientRect。)

您必须通过乘以屏幕变换矩阵的逆矩阵,将此客户端空间矩形转换为 SVG 坐标。这是一个有效的示例:
http://phrogz.net/SVG/tspan_bounding_box.xhtml

将其与 offsetWidth 配对 (适用于 Chrome 和 Safari,但不适用于 Firefox 或 Opera),您就有了一个应该适用于所有支持 SVG 的浏览器的解决方案。

You can use getBoundingClientRect() to find the screen-space bounding box of the tspan. I've tested and found this to work in Safari v5.0.4, Firefox 3.6 and 4.0RC, and Opera 11. However, it fails with Chrome, v10.0.648.151 and v11.0.696.14. (It returns a ClientRect with all values set to 0.)

You'll have to transform this client-space rectangle into SVG coordinates by multiplying by the inverse of the screen transform matrix. Here's a working example:
http://phrogz.net/SVG/tspan_bounding_box.xhtml

Pair this with offsetWidth (which works in Chrome and Safari, but not Firefox or Opera) and you have a solution that should work in all browsers that support SVG well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文