Event ondragend ทริกเกอร์เมื่อ การ Drag จบสิ้นสุด (ปล่อยเมาส์/ปล่อยนิ้ว) ไม่ว่าจะ Drop สำเร็จหรือยกเลิก
ตัวอย่างโค้ด: Drag and Drop 完整流程
<!DOCTYPE HTML>
<html>
<head>
<style>
.drag {
float: left; width: 100px; height: 35px;
border: 2px dashed #876587; margin: 15px; padding: 10px;
}
</style>
</head>
<body>
<div class="drag" ondrop="drop(event)" ondragover="dropNow(event)">
<p ondragstart="dragStart(event)" ondragend="dragEnd(event)" draggable="true" id="dragtarget">Drag!</p>
</div>
<div class="drag" ondrop="drop(event)" ondragover="dropNow(event)"></div>
<div id="box"></div>
<p>Drag the left box to the right or drag the right box to the left.</p>
<script>
function dragStart(event) {
event.dataTransfer.setData("Text", event.target.id);
}
function dropNow(event) {
event.preventDefault(); // อนุญาต Drop
}
function dragEnd(event) {
document.getElementById("box").innerHTML = "Dragging ends!";
}
function drop(event) {
event.preventDefault();
var data = event.dataTransfer.getData("Text");
event.target.appendChild(document.getElementById(data));
document.getElementById("box").innerHTML = "The element dropped successfully!";
}
</script>
</body>
</html>
Drag Events ลำดับ
dragstart— เริ่ม Drag (ตั้งค่า DataTransfer)drag— ระหว่าง Drag (ยิงซ้ำ)dragover— Element ถูก Drag Over (ต้องpreventDefault()เพื่อ Allow Drop)dragenter/dragleave— เข้า/ออก Drop Zonedrop— Placed/Dropped (ยิงก่อน dragend)dragend— จบการ Drag เสมอ (Cleanup)
dragend Event Object Properties
dataTransfer.dropEffect—"none","copy","move","link"(ผลลัพธ์ Drop)dataTransfer.effectAllowed— ที่ตั้งค่าไว้ตอน dragstart
การใช้งานจริงใน dragend
- Cleanup: ลบ Ghost Image, Reset Styles
- Analytics: Log Drag Result (Success/Cancel)
- Undo/Redo: บันทึก Action เมื่อ Drop สำเร็จ
- Revert Animation: กลับตำแหน่งเดิมถ้า Drop ไม่สำเร็จ