在javascript

时间:2016-04-13 07:50:36

标签: javascript svg

我试图创建一个函数来测量文本元素在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);
}




1 个答案:

答案 0 :(得分:1)

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

为元素赋予var elem1 = document.getElementById("text_elem"); var style = window.getComputedStyle(elem1, null); console.log(style.width, style.height); 属性,并在将其附加到DOM后,尝试:

<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>


工作示例

SVG

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);
});


的JavaScript

<body>

要使用该示例,请将SVG放入您的HTML <script>中,将JavaScript放在SVG下方的<body>标记中 - 也放在{{1}}中。