基本的なバブルチャートの 1 つを試して、D3 を学ぼうとしています。最初のタスク: バブルをドラッグして、ドラッグしている間、バブルを一番上のオブジェクトにする方法を理解します。(問題は、D3 のオブジェクト モデルを DOM にマップすることですが、そこにたどり着きます...)
ドラッグするには、d3 が提供するコードを使用して d3 のドラッグ動作を呼び出すだけです。
var drag = d3.behavior.drag()
.on("dragstart", dragstart)
.on("drag", dragmove)
.on("dragend", dragend);
よく働く。よく引きます。では、どうすれば一番上のアイテムになるのでしょうか? ここで「svg z-index」を検索すると、インデックスを変更する唯一の方法はオブジェクトを DOM 内でさらに下に移動することであることがすぐにわかります。わかった。個々のバブルには ID がないため、簡単にはできませんが、コンソールをいじって、これらのバブル オブジェクトの 1 つを次のように見つけることができます。
$("text:contains('TimeScale')").parent()
そして、次のようにして、それを含む svg 要素の最後に移動できます。
.appendTo('svg')
その後ドラッグすると、一番上のアイテムになります。ここまでは、完全に DOM 内で作業している場合は問題ありません。
しかし、私が本当にやりたいことは、特定のオブジェクト/バブルがドラッグされているときはいつでも自動的に起こるようにすることです. D3 は、ドラッグ プロセス中に実行するステートメントを埋め込むことができるモデルdragstart()
と関数を提供します。dragend()
また、D3 は、現在ドラッグしているオブジェクト/バブルのd3 のオブジェクト表現d3.select(this)
にアクセスできる構文を提供します。しかし、それらが返す大量の配列を、操作できる DOM 要素への参照にきれいに変換するにはどうすればよいでしょうか。たとえば、それを svg コンテナーの最後に移動したり、フォーム送信などの DOM で他の参照を実行したりするにはどうすればよいでしょうか。 ?