如何一次移动所有选定的节点? D3 / JS

时间:2014-12-11 13:39:44

标签: javascript d3.js

我在D3中制作了力导向图。

我能够在节点上拖动一个框并将其属性更改为“已选择”。

我现在要做的是立即移动所有这些选定的节点。这是我的拖动功能'

function dragstart(d, i) 
{
    force.stop(); //-stop the force layout as soon as you move nodes
}

function dragmove(d, i) //-change coordinates of nodes and lines ???
{
    d.px += d3.event.dx;
    d.py += d3.event.dy;
    d.x += d3.event.dx;
    d.y += d3.event.dy; 
    tick();
}
function dragend(d, i) //-when you stop dragging the node
{
    d.fixed = true; //-D3 giving the node a fixed attribute
    d3.select(this).classed("fixed", true); //-changing nodes CSS class
    tick(); //-update positions
}

如何应用此选项以便我一次移动所有选定的节点?

1 个答案:

答案 0 :(得分:0)

我假设你的意思是你改变了节点的类别以便选择'而不是他们的属性。我是D3js的初学者,但这就是我认为应该发生的事情:

d3.behaviour.drag()
    .on("dragstart", function() {
        d3.selectAll('.selected').each(dragstart(d,i))
    }) 
    .on("drag", function() {
        d3.selectAll('.selected').each(dragmove(d,i))
    }) 
    .on("dragend", function() {
        d3.selectAll('.selected').each(dragend(d,i))
    })

根据您的功能tick()的不同,这可能对您有用。