我知道 d3 根据调用的顺序渲染元素。因此,如果我想在黑色矩形上渲染白色文本,我可以先调用矩形,然后调用白色文本。
但是,在我的特定情况下,我的矩形尺寸基于我的白色文本,所以我必须首先调用白色文本。
我发现的解决方法是使用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?
最佳答案
如果我理解正确的话,附加矩形,附加文本,然后根据文本调整矩形大小会更简单:
<!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>
关于javascript - 如何在 d3 js 中正确使用 SVG 中的 Use 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54972119/