Javascript 如何获取SVG tspan元素的宽度
我试图获得SVG中Javascript 如何获取SVG tspan元素的宽度,javascript,jquery,svg,Javascript,Jquery,Svg,我试图获得SVG中tspan元素(位于text元素内部)的渲染宽度 这是我的标记: <text> <tspan>Value 1</tspan> <tspan>Value 2</tspan> </text> 因为我想要的是tpsan(“值1”/“值2”)的宽度,而不是文本元素,所以我不能使用getBBox(),因为该方法不适用于tspan元素 奇怪的是,使用jQuery的width()方法会在Chrome中返
tspan
元素(位于text
元素内部)的渲染宽度
这是我的标记:
<text>
<tspan>Value 1</tspan>
<tspan>Value 2</tspan>
</text>
因为我想要的是tpsan
(“值1”/“值2”)的宽度,而不是文本元素,所以我不能使用getBBox()
,因为该方法不适用于tspan
元素
奇怪的是,使用jQuery的width()
方法会在Chrome中返回正确的值,但在Firefox中返回NaN
。如果您有任何想法,我们将不胜感激。您可以使用找到tspan
的屏幕空间边界框。我在Safari v5.0.4、Firefox 3.6和4.0RC以及Opera 11中进行了测试,发现它可以正常工作。但是,它支持v10.0.648.151和v11.0.696.14。(它返回一个ClientRect,所有值都设置为0
)
您必须通过乘以屏幕转换矩阵的倒数,将这个客户机空间矩形转换为SVG坐标。下面是一个工作示例:将其与offsetWidth(适用于Chrome和Safari,但不适用于Firefox或Opera)相结合,您就有了一个在所有支持SVG的浏览器中都能正常工作的解决方案。在尝试了多种解决方案后,我发现这是获得SVG tspan宽度的最准确的方法。它也得到了很好的支持,并且在不同的浏览器上表现相同。我还发现,获取tspan高度的最佳方法就是读取字体大小属性。也许看看控制台,.width的核心函数会得出一个解释?jQuery似乎只使用了offsetWidth——我尝试了只合并offsetWidth值,Chrome给了我值,Firefox给了我“未定义的”。这似乎确实有效,尽管它似乎没有offsetWidth那么准确(或者可能更准确)。下面是我如何使用它的真实示例:我没有使用matrixTransform值,因为Firefox提供了.width和.height属性——这些属性在Opera/Safari中不受支持吗?我还没有时间看一下您的示例代码,但是我猜测,当您需要将单位从屏幕空间转换为SVG空间时,可能会以屏幕单位指定
offsetWidth
,或者进一步转换值。getClientBoundingRect不会在所有浏览器中都起作用。我认为getComputedTextLength是最好的方法。注意:这是实际字符的宽度,而不是tspans的边界框。字体字符可以略大于tspan边框。谢谢!非常有用,我最后使用了这个,以便在包含多行tspans的段落文本元素中模拟对齐。使用每个跨距的宽度,然后可以通过改变其x值来左对齐和居中对齐所有跨距,相对于上面的tspan。要左对齐跨距,通常不需要做任何事情,但如果出于某种原因,跨距还没有全部左对齐,那么将所有x值设置为0可以做到这一点,这是最简单的事情。兄弟,你真是个救命恩人
Value 1 Value 2
Value 10 Value 20
Value 100 Value 200
Value 1000 Value 2000