2

前提条件: d3 力指向のレイアウト。一部のノードは、1 つずつ連続してクリックすることで選択されます (視覚的に大きくなり、配列にプッシュされたコード内で)

Windows エクスプローラーのファイルと同じように、マウスで 1 つを選んでドラッグする方法はありますか?

PS私は、長い間尋ねることなく、スタックオーバーフローで非常に多くの答えを得ています。これは私の最初の質問です。助けてくれてありがとう!

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 に答える