【问题标题】:SVG textpath: text is not displayed in the browserSVG textpath:文本不显示在浏览器中
【发布时间】:2013-06-02 12:15:32
【问题描述】:

有人可以验证我创建的 svg 元素并解释为什么不显示文本吗?

作为背景故事,我正在编写一个脚本以更好地理解 d3.js,而最新的问题是创建一个围绕节点组的外壳,并在形成外壳的路径上插入一个标签以识别它。

代码生成节点和周围的船体 - 船体是一个 SVG 路径,所以我应该能够添加一个文本元素和一个映射到该路径的文本路径。

做一些黑客攻击,我有时可以显示文本,但“正确”写它没有显示。生成的 svg 代码是:

<g id="hull_elements">
<text>
    <textPath stroke="black" xlink:href="#Secure">Secure</textPath>
</text>
<text>
    <textPath stroke="black" xlink:href="#DMZ">DMZ</textPath>
</text>
<path class="boundary" id="Secure" d="M24.994993112707032,141.1110721988244L207.12813092409354,138.58243426955073L238.50323679510393,118.21543431124748L24.97785884420025,103.5985025585574Z" style="fill: #b0c4de; stroke: #b0c4de; stroke-width: 40px; stroke-linejoin: round;"></path>

<path class="boundary" id="DMZ" d="M88.15998924466983,242.42648560274165L208.29914853798698,349.28995851784157L189.37253440909416,316.73364831006586L117.42121587510853,219.36649184836727Z" style="fill: #b0c4de; stroke: #b0c4de; stroke-width: 40px; stroke-linejoin: round;"></path>
</g>

我相信这是有效的 - 我可以轻松地将文本元素移动到路径上方或下方,但文本仍然没有出现。

小提琴位于http://jsfiddle.net/zuzzy/hWd7K/1/,文本路径部分在第 382 行附近

谁能指出这有什么问题?奇怪的是,我实际上得到了一些工作(例如,请参阅第 370 行附近的 jsfiddle http://jsfiddle.net/zuzzy/cxnT8/,就 d3 而言,它的实现错误,但它实际上显示了文本)

谢谢!

【问题讨论】:

    标签: svg


    【解决方案1】:

    您已在文本顶部绘制路径,使其覆盖它。如果你也想看文字

    a) 将其绘制在路径的顶部

    function tick() {
      hullvis.selectAll("path")
            .data(groups)
            .attr("d", groupPath)
            .enter().insert("path", "realnode")
            .style("fill", "lightsteelblue")
            .style("stroke", "lightsteelblue")
            .style("stroke-width", 40)
            .style("stroke-linejoin", "round")
            .attr("class", "boundary")
            .attr("id", function (d) {return d.key;});
    
        //redraw the hull
        hullvis.selectAll("text")
            .data(groups)
            .enter().append("text").append("textPath")
            .attr("stroke","black")
            .attr("xlink:href", function (d) {return "#" + d.key;})
            .text(function (d) { return d.key;} );
    

    【讨论】:

    • 这正是问题所在。我实际上使路径位于一个 svg:g 中,而 text/textpath 位于另一个中,因此我可以稍后控制分层。现在工作...下一项工作,了解如何在形状不断变化的情况下将文本大致保持在形状上的一个位置...
    猜你喜欢
    • 1970-01-01
    • 2017-02-15
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多