前提条件:d3强制定向布局; 通过逐个顺序点击选择一些节点(在视觉上它们变得更大,并且在代码中推送到阵列)
有没有办法拖动所有这些都是用鼠标选择一个与Windows资源管理器中的文件相同的方式?
P.S。我在stackoverflow上得到了很多答案而没有要求很长时间。这是我的第一个问题。在此先感谢您的帮助!
答案 0 :(得分:3)
我强制拖动多个节点(基于子节点)的方式是通过一个变量来记录我的tick函数内部的拖动节点的位移,该变量的范围允许值在下次tick运行时仍然存在。
您将需要一个对象,其中键是被拖动节点的唯一标识符,该值是拖动键节点时要转换/拖动的节点的d3选择。
dragObject
是上述对象。
nodeData
是您要拖动的主要节点的d3数据 - (d3.select(node uid).datum())。
offset.x
和offset.y
组成了上次提到刻度线时定义的上述变量。
var translateAllChildren = function (nodeData) {
if (dragObject[nodeData.uid]) {
dragObject[nodeData.uid]
.attr("transform", function(d) {
d.x = (d.x + offset.x);;
d.y = (d.y + offset.y);
return "translate(" + d.x + "," + d.y + ")";
});
}
}