前提:d3强制定向布局;一些节点是通过依次单击来选择的(视觉上它们会变大并在代码中推送到数组)
有没有办法像 Windows 资源管理器中的文件一样用鼠标选择一个来拖动它们?
PS我在stackoverflow上得到了很多答案,而没有问很长时间。这是我的第一个问题。提前感谢您的帮助!
前提:d3强制定向布局;一些节点是通过依次单击来选择的(视觉上它们会变大并在代码中推送到数组)
有没有办法像 Windows 资源管理器中的文件一样用鼠标选择一个来拖动它们?
PS我在stackoverflow上得到了很多答案,而没有问很长时间。这是我的第一个问题。提前感谢您的帮助!
我实施拖动多个节点(基于子节点)的方式是通过使用变量记录被拖动节点在我的刻度函数内的位移,该变量的范围允许该值在下次刻度运行时仍然存在。
您将需要一个对象,其中键是被拖动节点的唯一标识符,值是您希望在拖动键节点时翻译/拖动的节点的 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 + ")";
});
}
}