HTMLElement: drop イベント
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Please take two minutes to fill out our short survey.
drop
イベントは、要素または選択されたテキストが、妥当なドロップターゲットにドロップされたときに発生します。drop
イベントが確実に期待通りに発生するように、dragover
イベントを処理するコードの一部に preventDefault()
呼び出しを常に記載してください。
このイベントは取り消される可能性があり、Document
と Window
オブジェクトまでバブルアップする可能性があります。
構文
このイベント名を addEventListener()
のようなメソッドで使用するか、イベントハンドラープロパティを設定するかします。
addEventListener("drop", (event) => {});
ondrop = (event) => {};
イベント型
イベントプロパティ
以下に挙げたプロパティに加えて、親である Event
から継承したプロパティもあります。
DragEvent.dataTransfer
読取専用-
ドラッグ&ドロップ操作の間に転送されるデータです。
例
最小限のドラッグ&ドロップの例
この例では、コンテナーの中にドラッグ可能な要素を置いています。要素を掴んで、他のコンテナーの上にドラッグし、放してみましょう。
ここでは、 3 つのイベントハンドラーを使用しています。
dragstart
イベント ハンドラーでは、ユーザーがドラッグした要素へのリファレンスを取得します。- ターゲットコンテナーの
dragover
イベントハンドラーでは、event.preventDefault()
を呼び出し、drop
イベントを受信できるようにします。 - ドロップゾーンの
drop
イベントハンドラーでは、ドラッグ可能な要素を元のコンテナーからドロップゾーンに移動する処理を行います。
ドラッグ&ドロップのより完全な例については、drag
イベントのページを参照してください。
HTML
<div class="dropzone">
<div id="draggable" draggable="true">この div はドラッグ可</div>
</div>
<div class="dropzone" id="droptarget"></div>
CSS
body {
/* 例でユーザーがテキストを選択するのを防ぐ */
user-select: none;
}
#draggable {
text-align: center;
background: white;
}
.dropzone {
width: 200px;
height: 20px;
background: blueviolet;
margin: 10px;
padding: 10px;
}
JavaScript
let dragged = null;
const source = document.getElementById("draggable");
source.addEventListener("dragstart", (event) => {
// ドラッグ中の要素の参照を保存
dragged = event.target;
});
const target = document.getElementById("droptarget");
target.addEventListener("dragover", (event) => {
// ドロップできるように既定の動作を停止
event.preventDefault();
});
target.addEventListener("drop", (event) => {
// 既定の動作(一部の要素でリンクとして開く)を行わないようにする。
event.preventDefault();
// ドラッグした要素を選択されたドロップターゲットに移動する
if (event.target.className === "dropzone") {
dragged.parentNode.removeChild(dragged);
event.target.appendChild(dragged);
}
});
結果
仕様書
Specification |
---|
HTML # ix-handler-ondrop |
HTML # event-dnd-drop |