Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
HTML ドラッグ&ドロップインターフェイスにより、アプリケーションはブラウザーでドラッグ&ドロップ機能を使用することができます。
ユーザーはマウスでドラッグ可能な要素を選択し、その要素をドロップ可能な要素へドラッグし、マウスボタンを離すことでドロップすることができます。ドラッグ操作の間、ドラッグ可能な要素の半透明の表示がマウスポインターに続きます。
ドラッグ可能にできる要素の種類、ドラッグ可能な要素が生成するフィードバックの種類、およびドロップ可能な要素はカスタマイズできます。
この HTML ドラッグ&ドロップの概要では、インターフェイスの説明、アプリケーションにドラッグ&ドロップのサポートを追加するための基本的なステップ、およびインターフェイスの相互運用性の要約があります。
表面上、ドラッグ&ドロップには実際には 3 つの異なる用途があります。ページ内での要素のドラッグ、ページからのデータのドラッグ、そしてページへのデータのドラッグです。これらは微妙に異なる要件と実装を有しています。しかしながら、ドラッグ&ドロップ API は、これら全てのインタラクションを統一的なモデルで捉えることを可能にしています。
ドラッグ操作の核心には、以下の 3 つの要素が含まれます。
必ずしもこれら 3 つすべてが自分の制御下にあるとは限りませんし、自分で定義する必要があるわけでもありません。
それぞれがどのように定義され、使用されるかについて見ていきましょう。
HTML ドラッグ&ドロップ では DOM イベントモデルと、マウスイベントから継承したドラッグイベントを使います。ドラッグ操作のあいだ、いくつかのイベント種類が発生し、そのうちいくつかは drag や dragover イベントのように、複数発生することもあります。
| dragstart | ドラッグ可能なアイテムのドラッグが開始されたとき。 |
| drag | ドラッグ可能なアイテムがドラッグされているとき、数百ミリ秒ごとに。 |
| dragenter | その要素に入ってきたドラッグ可能なアイテムがあるとき。 |
| dragleave | その要素から出ていくドラッグ可能なアイテムがあるとき。 |
| dragover | その要素の上をドラッグ可能なアイテムがドラッグされているとき、数百ミリ秒ごとに。 |
| drop | その要素がドロップターゲットであり、ドラッグ可能なアイテムがその上にドロップされたとき。 |
| dragend | ドラッグ可能なアイテムのドラッグが終了されたとき。 |
メモ: dragstart と dragend イベントは、どちらも OS からブラウザーにファイルをドラッグしたときには発生しません。
同様に、dragenter、dragleave、dragover、drop の各イベントは、ドロップ先となりうる要素上で発生します。したがって、アイテムをブラウザーの外へドラッグしている際には発生しません。
詳しくは、ドラッグ操作を参照してください。
HTML では、画像、リンク、および選択範囲はデフォルトでドラッグ可能です。任意の要素をドラッグ可能にするには、draggable 属性を "true" の値に設定してください。
この時点で、要素にはドラッグ用の外観が既に適用されていますが、動作はまだ定義されていません。
画像やリンクについては、draggable プロパティはデフォルトで true に設定されています。これらの要素のドラッグ機能を無効にする場合のみ、false に設定してください。ドラッグ不可の要素では、通常「ドラッグ」操作を行うと、代わりにテキストが選択されます。
メモ: 要素がドラッグ可能に設定されると、その内部のテキストやその他の要素は、通常のマウスクリックとドラッグ操作では選択できなくなります。代わりに、ユーザーはテキストを選択する際、Alt キーを押したままマウスを使用するか、キーボード操作を行わなければなりません。
選択範囲もドラッグ可能です。この場合、ソースノード、すなわち dragstart や dragend といった各種イベントは、ドラッグが開始されたテキストノードで発生します。選択範囲は、テキストノードや要素ノードを含む複数のノードを部分的または完全に包含することができ、これらはすべて同時にドラッグされているものとみなされます。
前述の通り、ドラッグされるアイテムはウェブページ上にないもの、例えばオペレーティングシステムのファイルエクスプローラー内のファイルなども対象となります。ただし、 dragstart および dragend イベントを発生させることができるのは、ウェブページ上のアイテムのみです。
詳しくは、ドラッグ操作ガイドを参照してください。
JavaScript オブジェクトを任意のウェブページへ直接転送することはできませんし、外部アプリケーションへの転送はなおさら不可能です。そのため、ウェブページとデータのやり取りを行うには、データを文字列に(または File として)シリアライズする必要があります。ドラッグ&ドロップでは、この文字列は DataTransferItem オブジェクトにカプセル化されます。このオブジェクトは特定の type(通常は text/html などの MIME タイプ)も定義しており、文字列の解釈方法を規定します。
それぞれのドラッグ&ドロップ操作には、関連付けられた「ドラッグデータストア」が存在します。これは、DragEvent の dataTransfer プロパティを通じてアクセス可能な DataTransfer オブジェクトです。画像、リンク、選択範囲などのデフォルトでドラッグ可能な項目については、ドラッグデータはブラウザーによって既に定義されています。一方、draggable属性を使用して定義されたカスタムのドラッグ可能要素については、ドラッグデータを自身で定義する必要があります。データストアへの変更を加えられるのは、 dragstart ハンドラー内のみです。その他のドラッグイベントにおける dataTransfer では、データストアは変更できません。
setData() メソッドはドラッグデータに項目を追加するのに使用され、その例は下記の通りです。
さらに、データストアから「読み取り」が可能なのは、dragstart イベントを除き、drop イベント中のみとなります(これによりドロップ先がデータを取得できます)。その他のイベントでは、データストアにアクセスすることはできません。
詳しくは、ドラッグデータストアでの作業を参照してください。
「ドロップターゲット」とは、ユーザーがドラッグしたアイテムをドロップできる要素のことです。デフォルトでは、ほとんどの要素はドロップターゲットではありません。ドラッグを解除すると、「フライバック」アニメーションが表示され、ドラッグ&ドロップが失敗したことを示します。任意の要素は、自身で発生する dragover イベントを preventDefault() でキャンセルすることにより、ドロップターゲットとなることが可能です。
drop イベントはドロップターゲット上でしか発生せず、ドラッグデータストアを読み取れる唯一のタイミングとなります。
以下の例は、最小限の有効なドロップターゲットを示しており、また、これ以前の例のコードも組み合わせています。
詳しい情報は、ドロップ先の指定を参照してください。
ドラッグ&ドロップ操作中に発生する手順について説明し、各ハンドラー内でアプリケーションが実行すべき処理を記述します。
ドラッグデータストアでの作業ドラッグ&ドロップ操作中に、ドラッグデータストアへの読み書きを行う方法について説明します。
ファイルのドラッグ&ドロップファイルのドラッグ&ドロップ操作を受け付ける基本インターフェイスの実装に関する実践ガイドです。
ドラッグ&ドロップのできるカンバンボードウェブページ内で要素をドラッグ&ドロップする機能を備えたカンバンボードを実装するための実践ガイドです。
ドラッグイベントハンドラーに渡されるイベントオブジェクトです。
DataTransferコンテキスト間で転送されるあらゆるデータを保持します。テキストアイテムとファイルアイテムで構成されています。当初はドラッグ&ドロップ用に設計されたものですが、現在ではクリップボード API などの他のコンテキストでも使用されています。
DataTransferItemドラッグデータストア内の 1 つのアイテムを表します。これはテキストアイテムまたはファイルアイテムとなります。
DataTransferItemListドラッグデータストア内の DataTransferItem オブジェクトのリストを表します。
各インターフェイスのリファレンスページには、個別の例も掲載されています。
| HTML |
This page was last modified on 2025年11月25日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.