据我所知,该问题是,拖动工作有圆圈但不与群组,因为某些原因
您正在操纵使用cx和cy属性拖动节点。 g
元素没有这些,所以这不会达到你想要的东西,即使node
包含组,而不是圈:
node.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; })
如前所述,node = g.append("circle")
意味着你实际上并没有操纵g
元素不管怎么说,这这就是为什么你的圈子在打勾或拖动时移动。
相反,保持节点选择g
元素,并操纵transform
属性:
// the group representing each node:
node = node.enter().append("g").merge(node);
// the circle for each group
node.append("circle")
.classed('node', true).attr('id', id)
.text(id)
.attr("r", 25).attr("fill", function(d) { return color(d.id); });
// the text for each group
node.append("text")
.classed('text', true)
.attr("text-anchor", "start")
.attr("dx", 6).text(id).merge(node);
然后点击或拖动事件,只需更新改造:
蜱:
node.attr("transform",function(d) { return "translate("+d.x+","+d.y+")" ;});
拖动:
d.x = d3.event.x;
d.y = d3.event.y;
d3.select(this).attr("transform",function(d) { return "translate("+d.x+","+d.y+")" ;});
这是updated fiddle。
就是这样。谢谢你,安德鲁!编辑是微不足道的,但我无法用头围住它。 – one2gov