Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> HTML

ใช้ Drag and Drop ใน HTML5


Drag and Drop (DnD) แนวคิด UI อันทรงพลัง ทำให้คัดลอก จัดเรียง ลบรายการได้ง่ายด้วยเมาส์ HTML5 มี DnD API รองรับเนทีฟ ไม่ต้องพึ่ง jQuery หรือ JS ซับซ้อนเหมือน HTML4

ขั้นตอนการทำ Drag and Drop

ขั้นตอน 1: ทำให้วัตถุลากได้ (Draggable)

ตั้งค่า draggable="true" บนองค์ประกอบที่ต้องการลาก ตั้ง event listener dragstart เก็บข้อมูลที่ลาก กำหนด effect ที่อนุญาต (copy, move, link)

<!DOCTYPE HTML> <html>    <head>       <style>          #boxA, #boxB { float:left;padding:10px;margin:10px; }          #boxA { background:#50B948; width:75px; height:75px; }          #boxB { background:#0000FF; width:150px; height:150px; }       </style>       <script>          function dragStart(ev) {             ev.dataTransfer.effectAllowed='move';             ev.dataTransfer.setData("Text", ev.target.id);             ev.dataTransfer.setDragImage(ev.target,0,0);             return true;          }       </script>    </head>    <body>       <center>          <h2>Drag and drop in HTML5</h2>          <div>ลากกล่องเขียวได้</div>          <div id="boxA" draggable="true" ondragstart="return dragStart(event)">             <p>Drag Me</p>          </div>          <div id="boxB">Dustbin</div>       </center>    </body> </html>

ขั้นตอน 2: รับการวาง (Dropping)

เป้ารับการวางต้องฟังเหตุการณ์อย่างน้อย 3 ตัว:

  • dragenter - กำหนดว่ารับการวางหรือไม่ (ต้อง preventDefault())
  • dragover - กำหนด feedback ให้ผู้ใช้ (ต้อง preventDefault())
  • drop - จัดการเมื่อวางจริง รับข้อมูลจาก dataTransfer.getData()
<!DOCTYPE HTML> <html>    <head>       <style> ... </style>       <script>          function dragStart(ev) { ... }          function dragEnter(ev) { ev.preventDefault(); return true; }          function dragOver(ev) { ev.preventDefault(); return false; }          function dragDrop(ev) {             var src = ev.dataTransfer.getData("Text");             ev.target.appendChild(document.getElementById(src));             ev.stopPropagation();             return false;          }       </script> </head>    <body> ... <div id="boxB" ondragenter="dragEnter(event)" ondrop="dragDrop(event)" ondragover="dragOver(event)">Dustbin</div> ...

API หลัก: dataTransfer.setData(), dataTransfer.getData(), dataTransfer.effectAllowed, dataTransfer.dropEffect