2

前提:d3强制定向布局;一些节点是通过依次单击来选择的(视觉上它们会变大并在代码中推送到数组)

有没有办法像 Windows 资源管理器中的文件一样用鼠标选择一个来拖动它们?

PS我在stackoverflow上得到了很多答案,而没有问很长时间。这是我的第一个问题。提前感谢您的帮助!

4

1 回答 1

3

我实施拖动多个节点(基于子节点)的方式是通过使用变量记录被拖动节点在我的刻度函数内的位移,该变量的范围允许该值在下次刻度运行时仍然存在。

您将需要一个对象,其中键是被拖动节点的唯一标识符,值是您希望在拖动键节点时翻译/拖动的节点的 d3 选择。

dragObject是上述对象。

nodeData是您拖动的主节点的 d3 数据 - ( d3.select(node uid).datum() )。

offset.xoffset.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 + ")";
            });
    }
}
于 2013-10-26T06:21:30.210 回答