HTML5 ドラッグ&ドロップ

❮ 前章へ 次章へ ❯

ドラッグ&ドロップは、HTML5 標準の一部です。


W3Schools

Drag the W3Schools image into the rectangle.


ドラッグ&ドロップ

ドラッグ&ドロップは、ごく一般的な機能で、オブジェクトを「つかみ」、別の場所にドラッグします。

HTML5 では、ドラッグ&ドロップは標準の一部で、あらゆる要素をドラッグすることが可能です。


ブラウザ・サポート

表中の数字は、完全にドラッグ&ドロップをサポートした最初のブラウザのバージョンを示しています。

API
ドラッグ&ドロップ 4.0 9.0 3.5 6.0 12.0

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

簡単なドラッグ&ドロップの例を下に示します:

<!DOCTYPE HTML>
<html>
<head>
<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>

<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>

<img id="drag1" src="img_logo.gif" draggable="true"
ondragstart="drag(event)" width="336" height="69">

</body>
</html>

Try it yourself ❯

複雑に見えかもしてませんが、ドラッグ&ドロップイベントのすべてを使用しています。


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

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

<img draggable="true">

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

次に、要素をドラッグしたときにどうするのかを指定します。

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

dataTransfer.setData() メソッドは、ドラッグ・データのデータタイプと値を設定します:

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

この場合、データタイプは "text" で、値は draggable 要素の 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));
}

コードの説明:


Examples

その他の例

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


❮ 前章へ 次章へ ❯