D3.js v4/5 drag 使い方
D3のドラッグイベントについて解説します。
サンプルデモ – 円をドラッグしてください。
使い方
D3のdragは、タッチイベントに対応しています。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
d3.selectAll(".class").call( d3.drag() .on("start", dragstarted) .on("drag", dragged) .on("end", dragended)); ); //ドラッグスタート時に呼び出される関数 function dragstarted() { // 処理を記載 } //ドラッグ中に呼び出される関数 function dragged() { // 処理を記載 } //ドラッグ終了時に呼び出される関数 function dragended() { // 処理を記載 } |
“.class”の部分にドラッグイベントを設定したい要素のclass属性を指定してください。
内部的にはonメソッドにより”.drag”をイベントとして登録しているので、dragイベントを解除したい場合は
|
1 |
d3.selectAll(".class").on(".drag", null); |
とすれば解除できます。
イベント変数
イベントが開始されると下記のイベント変数がd3.eventに登録されます。
| target | d3.drag( )で生成したオブジェクトへの参照。 |
| type | ドラッグ操作タイプ。 “start”、“drag”、“end”のどれか。 |
| subject | ドラッグイベントに関連付けられた要素のデータobjectへの参照。 |
| x | 現在のx座標 |
| y | 現在のy座標 |
| dx | x座標の変化量 (≠ドラッグ総移動量) |
| dy | y座標の変化量 (≠ドラッグ総移動量) |
| identifier | 文字列 “mouse”、または数字のタッチ識別子。 |
| active | 現在アクティブなドラッグジェスチャーの数。 |
| sourceEvent | mousemoveやtouchmoveなどのドラッグイベントの基になる入力イベント。 |
dragstartedなどの関数内で”d3.event.target”などとすれば参照できます。
他のイベントとの対応
下記が他イベントの対応表です。start、drag、endの三つにイベントを集約してくれています。
| Event | Listening Element | Drag Event | Default Prevented? |
|---|---|---|---|
| mousedown | selection | start | no |
| mousemove | window | drag | yes |
| mouseup | window | end | yes |
| dragstart | window | – | yes |
| selectstart | window | – | yes |
| click | window | – | yes |
| touchstart | selection | start | no |
| touchmove | selection | drag | yes |
| touchend | selection | end | no |
| touchcancel | selection | end | no |
参照サイト(d3-drag)
まとめ
タッチイベントにも自動で対応しており、マルチデバイスに対応できます。D3のzoomイベントもこちらにまとめていますので参照ください。




