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.

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

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
drop event

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

関連情報