我正试图根据此示例在该代码笔中添加标签和图标Labeled Force Layout
在我的restart
方法中,我添加了代码
node.append("image")
.attr("xlink:href", "https://github.com/favicon.ico")
.attr("x", -8).attr("y", -8).attr("width", 16).attr("height", 16)
.on("mousedown", mousedownNode);
node.append("text").attr("dx", 12).attr("dy", ".35em").text(function(d) { return d.id });
在我现有的代码之后:
node.enter().insert("circle", ".cursor")
.attr("class", "node").attr("r", 10).on("mousedown", mousedownNode);
我知道我先把节点做成圆形,然后尝试添加一个图标,这就是这里的问题,但我不确定如何修复它。
不能将<text>
元素追加到<circle>
元素。
这里的惯用解决方案是将node
转换为组选择,就像Mike Bostock在您共享的示例中所做的那样:
node.enter().insert("g", ".cursor")
.attr("class", "node");
然后,将圆圈和文本附加到node
:
node.append("circle")
.attr("r", 10)
.on("mousedown", mousedownNode);
node.append("text")
.attr("dx", 12)
.attr("dy", ".35em")
.text(function(d) {
return d.id
});
最后,更改tick
函数:
node.attr("transform", function(d) {
return "translate(" + d.x + "," + d.y + ")"
});
以下是更新后的CodePen:https://codepen.io/anon/pen/VBepoo?editors=0010
当然,这只是一个快速重构:您必须更改代码的其他部分,以便将node
作为组选择。
感谢Gerardo提供的这个非常有用的CodePen条目。显然,CSS覆盖了JS,必须进行修改才能显示图标,例如:
发件人:.node { fill: #000; }
收件人:.node { fill: none; stroke: <some color so the labels appear>;}
我对CodePen 更新的更新