如何正确使用SVG中的Use标签和d3 js?

问题描述 投票:1回答:1

我知道d3根据被调用的顺序呈现元素。因此,如果我想在黑色矩形上渲染白色文本,我可以先调用rect然后调用白色文本。

但是,在我的特殊情况下,我的rect的维度是基于我的白色文本,所以我必须先调用白色文本。

我找到的复飞是使用use标签,但是我无法让它工作,这是我目前的尝试:

文本:

      var textToolTip = gToolTip
        .append("text")

        .attr("id", "toUse")
        .text(.....)...

使用标签:

var useText = gToolTip.append("use").attr("xlink:xlink:href", "#toUse");

我也尝试过textToolTip xlink:href,但它没有用。对于use标签,我试图使用xlink:href而不是xlink:xlink:href,它没有用。我使用双xlink因为我找到了这个答案:How do I define an SVG doc under <defs>, and reuse with the <use> tag?

javascript html d3.js svg
1个回答
3
投票

如果我正确理解你,那么附加矩形,附加文本,然后将矩形调整为文本会更简单:

<!DOCTYPE html>
<html>

  <head>
    <script src="https://d3js.org/d3.v5.min.js"></script>
  </head>

  <body>
    <svg width="900" height="900"></svg>
    <script>
      
      var svg = d3.select('svg');
      
      var rect = svg.append("rect")
        .style("fill", "black")
        .attr("x", 20)
        .attr("y", 20);
      
      var text = svg.append("text")
        .text("Now is the time for all good men to come to the aid of their country")
        .attr("x", 20)
        .attr("y", 20)
        .attr("alignment-baseline","hanging")
        .style("fill","steelblue")
        .style("font-family", "arial")
        .style("font-size", "14pt")
        
      var bbox = text.node().getBBox();
      
      rect.attr("width", bbox.width);
      rect.attr("height", bbox.height);
    </script>
  </body>

</html>
© www.soinside.com 2019 - 2024. All rights reserved.