Drag and Drop
DataTransfer オブジェクトは、コンテキスト間で転送されるデータ(ドラッグ&ドロップ操作やクリップボードの読み書きなど)を保持するために使用されます。1 つ以上のデータ項目を保持でき、各項目は 1 つ以上のデータ型を持つ可能性があります。
DataTransfer は主に HTML ドラッグ&ドロップ API の DragEvent.dataTransfer プロパティとして設計され、現在も HTML ドラッグアンドドロップセクションで規定されています。しかし現在では、ClipboardEvent.clipboardData や InputEvent.dataTransfer などの他の API でも使用されるようになりました。ただし、他の API は dropEffect などのプロパティを無視し、そのインターフェイスの一部のみを使用します。DataTransfer のドキュメントでは主にドラッグ&ドロップ操作における使用法について説明します。他のコンテキストでの DataTransfer の使用法については、各 API のドキュメントを参照してください。
対応ブラウザ
| 機能 | デスクトップ | モバイル | ||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Safari | Chrome Android | Safari iOS | |
| 3 | 12 | 3.5 | 4 | 18 | 3.2 | |
| DataTransfer.clearData() メソッドは、ドラッグ操作のドラッグデータの中で指定された型のものを削除します。指定された型のデータが存在しない場合、このメソッドは何もしません。 | 3 | 12 | 3.5 | 4 | 18 | 3.2 |
| DataTransfer コンストラクターは、新しい DataTransfer オブジェクトのインスタンスを作成します。 | 59 | 17 | 62 | 14.1 | 59 | 14.5 |
| DataTransfer.dropEffect プロパティは、ドラッグ&ドロップ操作中にユーザーに与えられるフィードバック(通常は視覚的)を制御します。これは、ドラッグ中に表示されるカーソルに影響します。例えば、ユーザーがターゲットのドロップ要素の上にカーソルを置くと、ブラウザーのカーソルが、どの種類の操作が発生するかを示すことができます。 | 3 | 12 | 3.5 | 4 | 18 | 3.2 |
| DataTransfer.effectAllowed プロパティは、ドラッグ操作で許可される効果を指定します。コピー操作は、ドラッグされるデータを現在の位置からドロップ位置にコピーすることを示すために使用されます。移動操作は、ドラッグされるデータを移動することを示すために使用され、リンク操作は、ソース位置とドロップ位置の間に何らかの形の関係または接続を作成することを示すために使用されます。 | 3 | 12 | 3.5 | 4 | 18 | 3.2 |
| files は DataTransfer オブジェクトの読み取り専用プロパティで、ドラッグ操作中のファイルのリストです。操作にファイルが含まれていない場合、リストは空になります。 | 3 | 12 | 3.6 | 4 | 18 | 3.2 |
| DataTransfer.getData() メソッドは、指定した型のドラッグデータを(文字列として)受け取ります。ドラッグ操作がデータを含んでいない場合、このメソッドは空文字列を返します。 | 3 | 12 | 3.5 | 4 | 18 | 3.2 |
| items は DataTransfer インターフェイスの読み取り専用プロパティで、ドラッグ操作でのDataTransferItemのDataTransferItemListです。リストには操作中のアイテムごとに 1 つの項目が含まれており、操作にアイテムがなかった場合はリストは空になります。 | 3 | 12 | 50 | 11.1 | 18 | 11.3 |
| DataTransfer.setData() メソッドは、ドラッグ操作のドラッグデータに指定したデータと型を設定します。与えられた型のデータが存在しない場合、このデータはドラッグデータストアの末尾に加えられ、このような DataTransfer.types リストの最後の項目は新しい型になります。与えられた型のデータが存在する場合、既存のデータが同じ位置で置き換えられます。同じ型のデータが置き換えられる時、DataTransfer.types リストの並び順は変更されません。 | 3 | 12 | 3.5 | 5 | 18 | 5 |
| ドラッグが発生すると、ドラッグ対象(HTMLElement/dragstart_event イベントが発生した要素)から半透明の画像が生成され、ドラッグ中にマウスポインターに沿って移動します。この画像は自動的に作成されるので、自分で作成する必要はありません。ただし、カスタム画像が必要な場合は、DataTransfer.setDragImage() メソッドを使用して、使用するカスタム画像を設定することができます。画像は通常、 img 要素になりますが、 canvas やその他の可視要素であっても構いません。 | 3 | 18 | 3.5 | 4 | 18 | 3.2 |
| DataTransfer.types は読み取り専用プロパティで、 DataTransfer.items に存在する利用可能な型を返します。 | 3 | 12 | 3.5 | 4 | 18 | 3.2 |
| DataTransferItem オブジェクトは、1 つのドラッグデータ項目を表します。ドラッグ操作中、それぞれの DragEvent は DragEvent.dataTransfer プロパティを持ち、このプロパティにはドラッグデータ項目の DataTransferItemList を含みます。リスト内のそれぞれの項目は DataTransferItem オブジェクトです。 | 11 | 12 | 50 | 5.1 | 18 | 5 |
| アイテムがファイルの場合、 DataTransferItem.getAsFile() メソッドはドラッグデータ項目の File オブジェクトを返します。項目がファイルでない場合、このメソッドは null を返します。 | 11 | 12 | 50 | 5.1 | 18 | 5 |
| getAsFileSystemHandle() は DataTransferItem インターフェイスのメソッドで、Promise を返します。これはドラッグ中の項目がファイルであれば FileSystemFileHandle で、ドラッグ中の項目がディレクトリーであれば FileSystemDirectoryHandle で履行されます。 | 86 | 86 | | | 132 | |
| DataTransferItem.getAsString() メソッドは、項目の DataTransferItem.kind が プレーン Unicode 文字列 (すなわち kind が string)である場合に、ドラッグデータ項目の文字列データを引数に指定してコールバックを呼び出すメソッドです。 | 11 | 12 | 50 | 5.1 | 18 | 5 |
| DataTransferItem.kind プロパティは読み取り専用で、 ドラッグデータ項目 の種類(テキストまたはファイル)を表す DataTransferItem オブジェクトを返すものです。 | 11 | 12 | 50 | 5.1 | 18 | 5 |
| DataTransferItem.type プロパティは読み取り専用で、ドラッグデータ項目を表す DataTransferItem オブジェクトの種類(形式)を返すものです。 type は一般的に MIME タイプで指定される Unicode 文字列ですが、MIME タイプである必要はありません。 | 11 | 12 | 50 | 5.1 | 18 | 5 |
| DataTransferItemList オブジェクトは DataTransferItem オブジェクトのリストで、ドラッグされているアイテムを表します。ドラッグ操作の間、それぞれの DragEvent は DragEvent.dataTransfer プロパティを持ち、そのプロパティが DataTransferItemList となります。 | 13 | 12 | 50 | 6 | 18 | 6 |
| DataTransferItemList.add() メソッドは、指定されたデータを使用して新しい DataTransferItem を作成し、ドラッグデータリストに追加します。アイテムは File または指定された種類の文字列です。リストへの追加が成功すると、新しく作成された DataTransferItem オブジェクトが返されます。 | 13 | 12 | 50 | 6 | 18 | 6 |
| DataTransferItemList の clear() メソッドは、ドラッグデータアイテムリストからすべての DataTransferItem オブジェクトを削除し、リストを空にします。 | 13 | 12 | 50 | 6 | 18 | 6 |
| length は DataTransferItemList インターフェイスの読み取り専用プロパティで、ドラッグアイテムリストの中に現在入っているアイテムの数を返します。 | 13 | 12 | 50 | 6 | 18 | 6 |
| DataTransferItemList.remove() メソッドは指定された位置の DataTransferItem をリストから削除します。位置が 0 より小さいか、リストの長さより 1 だけ小さい値より大きい場合、リストは変更されません。 | 31 | 12 | 50 | 6 | 31 | 6 |
| DragEvent インターフェイスは、ドラッグ&ドロップ操作を表す DOM イベントです。ユーザーはタッチ面でポインティングデバイス(マウスなど)を置くことによりドラッグを開始して、ポインターを新たな場所(別の DOM 要素など)にドラッグします。アプリケーションは独自の方法で、ドラッグ&ドロップの操作を自由に解釈できます。 | 46 | 12 | 3.5 | 14 | 46 | 14 |
| DragEvent.dataTransfer プロパティは、ドラッグ操作のデータを(DataTransfer オブジェクトとして)保持します。 | 46 | 12 | 3.5 | 14 | 46 | 14 |
| このコンストラクターは、合成した DragEvent オブジェクトを作成するために使用します。 | 46 | 12 | 3.5 | 14 | 46 | 14 |
| drag イベントは、要素や選択されたテキストをユーザーがドラッグしている間に、数百ミリ秒ごとに発生します。 | 1 | 12 | 9 | 3.1 | 18 | 2 |
| dragend イベントは、ドラッグ操作が終わろうとしているとき(マウスボタンを離したり、エスケープキーを押したりしたとき)に発生します。 | 1 | 12 | 9 | 3.1 | 18 | 2 |
| dragenter イベントは、ドラッグ中のイベントやテキストの選択範囲が、有効なドロップターゲットに入ったときに発生します。ターゲットオブジェクトは、ユーザーが直接選択した要素(ドロップ対象としてユーザーが直接示した要素)、または body 要素です。 | 1 | 12 | 9 | 3.1 | 18 | 2 |
| draggable は HTMLElement インターフェイスのプロパティで、要素がドラッグ可能かどうかを示す論理値プリミティブを取得または設定します。 | 4 | 12 | 2 | 5 | 18 | 4 |
| dragleave イベントは、ドラッグしている要素や選択中のテキストが妥当なドロップターゲットを離れたときに発生します。 | 1 | 12 | 9 | 3.1 | 18 | 2 |
| dragover イベントは、要素または選択されたテキストが、妥当なドロップターゲットの上にあるときに(数百ミリ秒間隔で)発生します。 | 1 | 12 | 9 | 3.1 | 18 | 2 |
| dragstart イベントは、ユーザーが要素や選択されたテキストをドラッグし始めたときに発生します。 | 1 | 12 | 9 | 3.1 | 18 | 2 |
| drop イベントは、要素または選択されたテキストが、妥当なドロップターゲットにドロップされたときに発生します。drop イベントが確実に期待通りに発生するように、dragover イベントを処理するコードの一部に preventDefault() 呼び出しを常に記載してください。 | 1 | 12 | 9 | 3.1 | 18 | 2 |
- Firefox 52 では、`DataTransfer.types` プロパティは `DOMStringList` ではなく、仕様に従って `DOMString` のフローズン配列を返します。
- drag` イベントハンドラは `DragEvent` の座標プロパティ (`clientX`/`clientY`, `pageX`/`pageY`, `screenX`/`screenY`) が常に `0` であるイベントを受け取る。バグ 505521 を参照してください。
基本構文
<div draggable="true"
ondragstart="event.dataTransfer.setData('text/plain', 'データ')">
Drag to move
</div>
<div ondragover="event.preventDefault()"
ondrop="event.preventDefault(); alert(event.dataTransfer.getData('text/plain'))">
Drop here
</div> ライブデモ
Draggable Attribute
Element. Dragpossible control.image and link is default in dragpossible. with draggable
実務での使いどころ
-
Drag and Drop の活用
DataTransfer オブジェクトは、コンテキスト間で転送されるデータ(ドラッグ&ドロップ操作やクリップボードの読み書きなど)を保持するために使用されます。
注意点
- 古いブラウザでは対応していない場合がある。
アクセシビリティ
- スクリーンリーダーでの読み上げを確認すること。