HTMLElement: drop イベント

drop イベントは、要素または選択されたテキストが、妥当なドロップターゲットにドロップされたときに発生します。drop イベントが確実に期待通りに発生するように、dragover イベントを処理するコードの一部に preventDefault() 呼び出しを常に記載してください。

このイベントは取り消される可能性があり、DocumentWindow オブジェクトまでバブルアップする可能性があります。

構文

このイベント名を addEventListener() のようなメソッドで使用するか、イベントハンドラープロパティを設定するかします。

js
addEventListener("drop", (event) => {});

ondrop = (event) => {};

イベント型

DragEvent です。 Event を継承しています。

Event UIEvent MouseEvent DragEvent

イベントプロパティ

以下に挙げたプロパティに加えて、親である Event から継承したプロパティもあります。

DragEvent.dataTransfer 読取専用

ドラッグ&ドロップ操作の間に転送されるデータです。

最小限のドラッグ&ドロップの例

この例では、コンテナーの中にドラッグ可能な要素を置いています。要素を掴んで、他のコンテナーの上にドラッグし、放してみましょう。

ここでは、 3 つのイベントハンドラーを使用しています。

  • dragstart イベント ハンドラーでは、ユーザーがドラッグした要素へのリファレンスを取得します。
  • ターゲットコンテナーの dragover イベントハンドラーでは、 event.preventDefault() を呼び出し、drop イベントを受信できるようにします。
  • ドロップゾーンの drop イベントハンドラーでは、ドラッグ可能な要素を元のコンテナーからドロップゾーンに移動する処理を行います。

ドラッグ&ドロップのより完全な例については、drag イベントのページを参照してください。

HTML

html
<div class="dropzone">
  <div id="draggable" draggable="true">この div はドラッグ可</div>
</div>
<div class="dropzone" id="droptarget"></div>

CSS

css
body {
  /* 例でユーザーがテキストを選択するのを防ぐ */
  user-select: none;
}

#draggable {
  text-align: center;
  background: white;
}

.dropzone {
  width: 200px;
  height: 20px;
  background: blueviolet;
  margin: 10px;
  padding: 10px;
}

JavaScript

js
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 Standard
# ix-handler-ondrop
HTML Standard
# event-dnd-drop

ブラウザーの互換性

BCD tables only load in the browser

関連情報