HTMLElement: drop イベント

drop イベントは、要素または選択されたテキストが、妥当なドロップターゲットにドロップされたときに発生します。

バブリング あり
キャンセル
既定のアクション 様々
インターフェイス DragEvent
イベントハンドラープロパティ ondrop

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

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

ここでは、 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 Standard
# ix-handler-ondrop
HTML Standard
# event-dnd-drop

ブラウザーの互換性

BCD tables only load in the browser

関連情報