【问题标题】:svg appending text element - gives me wrong widthsvg 附加文本元素 - 给我错误的宽度
【发布时间】:2012-01-13 09:19:55
【问题描述】:

我正在通过 javascript 将文本元素附加到 svg。附加后我想设置 x 和 y 坐标,但是,它在使用它来计算 x 时返回文本元素的错误宽度。

有趣: 在 Chrome 中,当通过 F5 或按钮实现页面时返回错误的宽度,当在地址栏中按 Enter 时,宽度是正确的 - 奇怪!

下面是小代码:

var capt = document.createElementNS("http://www.w3.org/2000/svg", "text");
    // Set any attributes as desired
    capt.setAttribute("id","capt");
    capt.setAttribute("font-family","Righteous");
    capt.setAttribute("font-size","30px");
    capt.setAttribute("fill", "rgb(19,128,183)");
    var myText = document.createTextNode(this.options.captTxt);
    capt.appendChild(myText);
    this.elements.jSvgElem.append(capt);
    capt.setAttribute("x", this.options.windowWidth-this.options.spacer-document.getElementById("capt").offsetWidth);
    capt.setAttribute("y", this.options.captY+$('#capt').height());

【问题讨论】:

    标签: javascript text svg width element


    【解决方案1】:

    有一个bug:http://code.google.com/p/chromium/issues/detail?id=140472

    它只是预先初始化了一些计算文本宽度的函数,所以你应该在之前调用这个函数(我确定有几行可以删除):

    fixBug = function () {
            var text = makeSVG("text", { x: 0, y: 0, fill: "#ffffff", stroke: '#ffffff'});
            text.textContent = "";
            var svg = $("svg")[0];
            svg.appendChild(text);
            var bbox = text.getBBox();
            var Twidth = bbox.width;
            var Theight = bbox.height;
            svg.removeChild(text);
    
        }
    

    $("svg") - Jquery 选择器

    【讨论】:

      【解决方案2】:

      好的,问题似乎是浏览器在使用其他字体时没有计算正确的宽度。不设置字体会导致正确的宽度。

      我通过设置属性将参考点(“对齐点”)设置为文本元素的右上角来解决问题:

      capt.setAttribute("文本锚", "end"); capt.setAttribute("alignment-baseline", "hanging");

      这样我就不必减去宽度并添加元素的高度!

      【讨论】:

        猜你喜欢
        • 2010-12-10
        • 2017-01-31
        • 1970-01-01
        • 2015-11-04
        • 1970-01-01
        • 2014-02-24
        • 2018-01-02
        • 2013-08-11
        • 1970-01-01
        相关资源
        最近更新 更多