HTML5 drag and drop

Dra CodeW3C.com-bilden till rektangeln.

Drag-and-drop

Drag-and-drop (Drag och Drop) är en mycket vanlig egenskap. Det innebär att du kan greppa något och dra det till en annan plats.

Drag-and-drop är en del av HTML5-standarden: alla element är flyttbara.

Webbläsarstöd

Tal i tabellen indikerar den första webbläsarens version som helt stöder drag-and-drop.

API
Drag-and-drop 4.0 9.0 3.5 6.0 12.0

HTML drag-and-drop-exempel

Följande är ett enkelt exempel om drag-and-drop:

Exempel

<!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>

Prova själv

Det kan verka lite komplext, men låt oss undersöka alla olika delar av drag-and-drop-händelserna.

Sätt elementet som flyttbar

Först: För att sätta en element som flyttbar, sätt draggable-attributet till true:

<img draggable="true">

Innehåll för drag-and-drop - ondragstart och setData()

Därefter specificeras vad som ska hända när elementet dras.

I det tidigare exemplet anropas ondragstart-attributet en drag(event)-funktion som specificerar vilket data som ska dras.

dataTransfer.setData() metoden sätter innehållet av den flyttbara datans datatyp och värde:

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

I detta exempel är datatypen "text" och värdet ID:t för den flyttbara elementen ("drag1").

Var att dra till - ondragover

Ondragover-händelsen definierar var de dragade data kan placeras.

Som standard kan data/element inte placeras i andra element. För att implementera drag and drop måste vi förhindra denna standardhantering av elementen.

Denna uppgift utförs av metoden event.preventDefault() för ondragover-händelsen:

event.preventDefault()

Placera - ondrop

En drop-event utlöses när den dragade data släpps.

I föregående exempel anropas ondrop-attribut en funktion, drop(event):

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

Kodförklaring:

  • Anropa preventDefault() för att förhindra standardhanteringen av data av webbläsaren (standardbeteendet för drop-evenemanget är att öppna som länk)
  • Få tag på de dragade data genom metoden dataTransfer.getData(). Denna metod returnerar alla data som har satts till samma typ i setData() -metoden
  • De dragade data är id:t för det dragade elementet ("drag1")
  • Lägg till den dragade elementet till det placerade elementet

Mer exempel

Dra och släpp bilder

Hur man drar och släpper bilderna mellan två <div>-element:

Dra CodeW3C.com-bilden till rektangeln.

Prova själv