gpt4 book ai didi

javascript - 测量尚未在 javascript 中创建的 SVG 文本

转载 作者:行者123 更新时间:2023-11-29 15:29:05 24 4
gpt4 key购买 nike

我正在尝试创建一个函数来测量文本元素在 SVG 元素中的大小。我在 Stack Overflow 上找到的代码示例不起作用,宽度为零。如果我延迟测量,我可以获得文本,但不是马上。这是怎么解决的?

var messureSVGtext = function(text, svg, options){
var text = document.createElementNS(svgns, 'text');
text.style.fontFamily = options.font;

text.setAttribute("style",
"font-family:" + options.font + ";" +
"font-size:" + options.fontSize + "px;"
);

var textNode = document.createTextNode(text);

text.appendChild(textNode);

svg.appendChild(text);

// This does not work
console.log(text.clientWidth);

//This does
setTimeout(function(){
console.log(text.clientWidth);
}, 100);
}

最佳答案

您可以获得元素的“计算样式”,然后从中检查宽度和高度。

给元素一个id属性并将其附加到 DOM 后,试试这个:

var elem1 = document.getElementById("text_elem");
var style = window.getComputedStyle(elem1, null);

console.log(style.width, style.height);


工作示例

SVG

<svg
xmlns="http://www.w3.org/2000/svg"
version="1.1"
width="640"
height="480"
viewBox="0 0 640 480"
style="display:block">

<text id="svg_text" x="20" y="50" style="font-family:Arial; font-size:36px; fill:#BADA55">Hello World!</text>

</svg>


JavaScript

function getCompStyle(oid, cbf)
{
var obj, stl, itv;

obj = document.getElementById(oid);
itv = setInterval(function()
{
stl = window.getComputedStyle(obj, null);

if (stl && (stl.width.indexOf('0') != 0))
{
clearInterval(itv);
cbf(stl);
}
},0);

}

getCompStyle('svg_text', function(style)
{
console.log(style.width);
});

要使用该示例,请将 SVG 放在您的 HTML 中 <body><script> 中的 JavaScript SVG 下方的标签 - 也在 <body> 中.

关于javascript - 测量尚未在 javascript 中创建的 SVG 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36591905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com