2017-11-22 5 views
0

私は(それは私に似ている)何かをしようとしています、 シンプルなはずですが、私の試みは非常に巻き込まれて、私はd3 ガイダンスを探しています。ドラッグしたグループを特定の座標にd3で「登録」するにはどうすればよいですか?

ドラッグの最後にドラッグされたドラッグされたグループオブジェクト(その矩形と のテキスト)があるとします。 はこのグループを特定の座標に「登録」します。それ、どうやったら出来るの?

d3.dragのon("end")イベントに関連付けられたdragended()関数に自分のコードを追加しています。

function dragended(d) { 
    var move = d3.select(this); 
    var g = move._groups[0][0]; // same as this! 
    var rect = g.children[0] 
    rect.x = schedLeft; 
    rect.y = schedTop; 

    d3.select(this).classed("active", false); 
} 

I変数moved3.select(this)を結合し、添付の図(クローム現像ローカル)に示すようなオブジェクト を得ます。

enter image description here

EDITmove._groups[0][0]は愚かです。 thisと同じです!

this私は移動したいグループ(子供recttextのノードを持つ)を得ることができます。

schedLeftは、グループを削除したいx座標です。 rectノードはxyの属性を持ちますが、私のrect.x = schedLeft は何も変わりません(デバッガを見て)。

グループ全体を (つまり、出席するtextを含む)の新しい場所に移行することは、正しい方法ですか?ヒントに

+0

まず: 'd3.select(この)._グループを[0] [0];'です「これだけ」と同じです。 2番目: 'schedLef'は何ですか?ここで何をしたいのですか? –

+0

@GerardoFurtado、#1はい、そうです。 #2: 'schedLeft'は、グループをドロップしたい場所のx座標です。 – rikb

答えて

0

おかげで私はSO here(2013年から!)に見つかった私はそれがこの使用して作業しました:

function dragended(d) { 
    // register dragged move into hourSched 
    var top = schedTop + (nsched++) * menuWOHgt; 
    var transX = newDropX - d.x ; 
    var transY = newDropY - d.y; 
    var tstr = `translate(${transX}, ${transY})`; 
    d3.select(this).attr("transform", tstr) 
        .classed("active", false); 
} 
関連する問題