Drag and Drop (DnD) เป็นแนวคิดอินเทอร์เฟซผู้ใช้ที่มีประสิทธิภาพ ซึ่งทำให้ง่ายต่อการคัดลอก เรียงลำดับใหม่ และลบรายการด้วยการคลิกเมาส์ ซึ่งช่วยให้ผู้ใช้สามารถคลิกปุ่มเมาส์ค้างไว้เหนือองค์ประกอบ ลากไปยังตำแหน่งอื่น และปล่อยปุ่มเมาส์เพื่อวางองค์ประกอบที่นั่น
เพื่อให้บรรลุฟังก์ชันการลากและวางด้วย HTML4 แบบเดิม นักพัฒนาอาจต้องใช้การเขียนโปรแกรม Javascript ที่ซับซ้อนหรือเฟรมเวิร์ก Javascript อื่นๆ เช่น jQuery เป็นต้น
ตอนนี้ HTML 5 มาพร้อมกับ API แบบลากแล้วปล่อย (DnD) ที่นำการสนับสนุน DnD ดั้งเดิมมาสู่เบราว์เซอร์ ทำให้เขียนโค้ดได้ง่ายขึ้นมาก
วิธีใช้งานการลากและวาง
ในการลากและวาง คุณต้องปฏิบัติตามกระบวนการสองขั้นตอน
ขั้นตอนที่ 1 - ทำให้วัตถุสามารถลากได้
ในการปรับใช้การลากและวางใน HTML5 ขั้นแรก คุณต้องทำให้วัตถุสามารถลากได้
หากคุณต้องการลากองค์ประกอบ คุณต้องตั้งค่าแอตทริบิวต์ที่ลากได้เป็นจริงสำหรับองค์ประกอบนั้น ตั้งค่าตัวฟังเหตุการณ์สำหรับ dragstart ที่เก็บข้อมูลที่ถูกลาก ตัวฟังเหตุการณ์ dragstart จะตั้งค่าเอฟเฟกต์ที่อนุญาต (คัดลอก ย้าย เชื่อมโยง หรือผสมกัน)
ตัวอย่าง
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
#boxA, #boxB {
float:left;padding:10px;margin:10px; -moz-user-select:none;
}
#boxA { background-color: #50B948; width:75px; height:75px; }
#boxB { background-color: #0000FF; width:150px; height:150px; }
</style>
<script type="text/javascript">
function dragStart(ev) {
ev.dataTransfer.effectAllowed='move';
ev.dataTransfer.setData("Text", ev.target.getAttribute('id'));
ev.dataTransfer.setDragImage(ev.target,0,0);
return true;
}
</script>
</head>
<body>
<center>
<h2>Drag and drop in HTML5</h2>
<div>Try to drag the green box around.</div>
<div id="boxA" draggable="true"
ondragstart="return dragStart(ev)">
<p>Drag Me</p>
</div>
<div id="boxB">Dustbin</div>
</center>
</body>
</html> ขั้นตอนที่ 2 - การวางวัตถุ
เพื่อยอมรับการดร็อป เป้าหมายการดร็อปต้องฟังเหตุการณ์อย่างน้อยสามเหตุการณ์
เหตุการณ์ dragenter ใช้เพื่อกำหนดว่าเป้าหมายการดร็อปคือการยอมรับการดร็อปหรือไม่ หากการดรอปเป็นที่ยอมรับ จะต้องยกเลิกกิจกรรมนี้ กิจกรรม dragover ซึ่งใช้เพื่อกำหนดว่าจะแสดงความคิดเห็นใดต่อผู้ใช้

นี่คือวิธีที่คุณสามารถวางวัตถุหนึ่งครั้งไปยังอีกวัตถุหนึ่ง
ตัวอย่าง
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
#boxA, #boxB {
float:left;padding:10px;margin:10px;-moz-user-select:none;
}
#boxA { background-color: #50B948; width:75px; height:75px; }
#boxB { background-color: #0000FF; width:150px; height:150px; }
</style>
<script type="text/javascript">
function dragStart(ev) {
ev.dataTransfer.effectAllowed='move';
ev.dataTransfer.setData("Text", ev.target.getAttribute('id'));
ev.dataTransfer.setDragImage(ev.target,0,0);
return true;
}
function dragEnter(ev) {
event.preventDefault();
return true;
}
function dragOver(ev) {
return false;
}
function dragDrop(ev) {
var src = ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(src));
ev.stopPropagation();
return false;
}
</script>
</head>
<body>
<center>
<h2>Drag and drop in HTML5</h2>
<div>Try to move the green box into the blue box.</div>
<div id="boxA" draggable="true"
ondragstart="return dragStart(ev)">
<p>Drag Me</p>
</div>
<div id="boxB" ondragenter="return dragEnter(ev)"
ondrop="return dragDrop(ev)"
ondragover="return dragOver(ev)">Dustbin
</div>
</center>
</body>
</html>