在d3强制定向布局中拖动多个节点

时间:2013-01-17 10:36:34

标签: javascript d3.js

前提条件:d3强制定向布局; 通过逐个顺序点击选择一些节点(在视觉上它们变得更大,并且在代码中推送到阵列)

有没有办法拖动所有这些都是用鼠标选择一个与Windows资源管理器中的文件相同的方式?

P.S。我在stackoverflow上得到了很多答案而没有要求很长时间。这是我的第一个问题。在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

我强制拖动多个节点(基于子节点)的方式是通过一个变量来记录我的tick函数内部的拖动节点的位移,该变量的范围允许值在下次tick运行时仍然存在。

您将需要一个对象,其中键是被拖动节点的唯一标识符,该值是拖动键节点时要转换/拖动的节点的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 + ")";
            });
    }
}
相关问题