在对此感到困惑之后,我有一些接近我想要的东西,所以我会分享。
首先,布局引擎没有点击处理程序,但这不是必需的;我想单击一个节点并将其固定,因此我需要该节点上的单击处理程序。
其次,在力布局引擎的 d3 API 中描述的节点级别有一个“固定”属性。
结合这两者,我可以将点击处理程序添加到锁定或解锁节点位置的节点。
使用此处的示例,我将以下内容添加到 CSS:
circle:hover { fill: red; }
并将圆定义从:
var circle = svg.append("svg:g").selectAll("circle")
.data(force.nodes())
.enter().append("svg:circle")
.attr("r", 6)
.call(force.drag);
到
var circle = svg.append("svg:g").selectAll("circle")
.data(force.nodes())
.enter().append("svg:circle")
.attr("r", 6)
.on("click", function(d){ d.fixed = 1 - d.fixed; force.start(); })
.call(force.drag);
现在,当我将鼠标悬停在一个圆圈上时,它会变成红色(显示我捕获了它),然后如果我单击它,它会将其锁定到位。然后我可以在其他圈子上重复这个并将它们拖到我想要的位置。