HTML5 ドラッグ&ドロップ(Drag と Drop)


ドラッグ&ドロップ(Drag と Drop)は HTML5 標準の構成要素です。


将 example.comアイコンを四角い枠にドラッグします。


ドラッグ&ドロップ

ドラッグ&ドロップは、オブジェクトを掴んで別の位置にドラッグする一般的な機能です。

HTML5 では、ドラッグ&ドロップは標準の一部であり、あらゆる要素をドラッグ&ドロップできます。


ブラウザサポート

Internet ExplorerFirefoxOperaGoogle ChromeSafari

Internet Explorer 9+、Firefox、Opera、Chrome、Safari はドラッグをサポートしています。

注意:Safari 5.1.2 はドラッグをサポートしていません。


HTML5 ドラッグ&ドロップの例

次の例は、簡単なドラッグ&ドロップの例です:

例

<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>サンプル(example.com)</title> <style type="text/css"> #div1 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;} </style> <script> function allowDrop(ev) { ev.preventDefault(); } function drag(ev) { ev.dataTransfer.setData("Text",ev.target.id); } function drop(ev) { ev.preventDefault(); var data=ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); } </script> </head> <body> <p>example.com の画像を四角い枠にドラッグします:</p> <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div> <br> <img id="drag1" src="/images/logo.png" draggable="true" ondragstart="drag(event)" width="336" height="69"> </body> </html>

試してみる »

複雑に見えるかもしれませんが、ドラッグ&ドロップイベントの各部分を個別に調べることができます。


要素をドラッグ可能に設定する

まず、要素をドラッグ可能にするために、draggable 属性を true に設定します:

<img draggable="true">


何をドラッグするか - ondragstart と setData()

次に、要素がドラッグされたときに何が起こるかを指定します。

上記の例では、ondragstart 属性が関数 drag(event) を呼び出し、ドラッグされるデータを指定しています。

dataTransfer.setData() メソッドは、ドラッグされるデータのデータ型と値を設定します:

function drag(ev)
{
    ev.dataTransfer.setData("Text",ev.target.id);
}

Text は、ドラッグオブジェクトに追加されるドラッグデータの型を表す DOMString です。値はドラッグ可能な要素の id ("drag1") です。


どこに置くか - ondragover

ondragover イベントは、ドラッグされたデータをどこに配置するかを指定します。

デフォルトでは、データ/要素を他の要素に配置することはできません。配置を許可するには、要素のデフォルトの処理を阻止する必要があります。

これは、ondragover イベントの event.preventDefault() メソッドを呼び出すことで行います:

event.preventDefault()


ドロップする - ondrop

ドラッグされたデータがドロップされると、drop イベントが発生します。

上記の例では、ondrop 属性が関数 drop(event) を呼び出します:

function drop(ev)
{
    ev.preventDefault();
    var data=ev.dataTransfer.getData("Text");
    ev.target.appendChild(document.getElementById(data));
}

コードの説明:

  • preventDefault() を呼び出して、ブラウザによるデータのデフォルト処理を回避します(drop イベントのデフォルト動作はリンクとして開くことです)
  • dataTransfer.getData("Text") メソッドでドラッグされたデータを取得します。このメソッドは、setData() メソッドで同じ型として設定されたデータを返します。
  • ドラッグされたデータは、ドラッグされた要素の id ("drag1") です。
  • ドラッグされた要素をドロップ要素(ターゲット要素)に追加します。


Examples

その他の例

画像を前後にドラッグ&ドロップする
2 つの <div> 要素間で画像をドラッグ&ドロップする方法。

その他の拡張