0Pricing
JavaScript Academy · บทเรียน

การทำให้องค์ประกอบลากได้

เปิดใช้การลากและจัดการเหตุการณ์การลาก

การทำให้องค์ประกอบลากได้ เป็นบทเรียน JavaScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน JavaScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

API การลากและวางของ HTML

API การลากและวาง ในตัวช่วยให้ผู้ใช้จับองค์ประกอบแล้วนำไปวางที่อื่นได้ API นี้ขับเคลื่อนด้วยเหตุการณ์ องค์ประกอบต้นทางจะส่งเหตุการณ์การลาก และเป้าหมายการวางจะส่งเหตุการณ์ของตนเอง ไม่ต้องใช้ไลบรารี

แอตทริบิวต์ draggable

ตามค่าเริ่มต้น จะลากได้เฉพาะลิงก์และรูปภาพเท่านั้น เพิ่ม draggable="true" เพื่อทำให้องค์ประกอบใด ๆ ลากได้

<div draggable="true" id="card">Drag me</div>

การตั้งค่า draggable ใน JS

คุณสามารถเปิดหรือปิดพฤติกรรมนี้จากสคริปต์ผ่านคุณสมบัติ draggable ได้

const card = document.getElementById("card");
card.draggable = true;

เหตุการณ์ dragstart

dragstart จะทำงานทันทีที่เริ่มลาก นี่คือจุดที่คุณบันทึกว่ากำลังลากสิ่งใดอยู่

card.addEventListener("dragstart", (e) => {
  console.log("Started dragging", card.id);
});

การแนบข้อมูลด้วย dataTransfer

เหตุการณ์นี้เปิดเผย dataTransfer ใช้ setData(format, value) ใน dragstart เพื่อแนบข้อมูลที่เคลื่อนที่ไปพร้อมกับการลาก

card.addEventListener("dragstart", (e) => {
  e.dataTransfer.setData("text/plain", card.id);
});

เหตุการณ์ drag

drag จะทำงานอย่างต่อเนื่องขณะที่องค์ประกอบเคลื่อนที่ ควรใช้เท่าที่จำเป็น เพราะอาจทำงานหลายครั้งต่อวินาที

card.addEventListener("drag", (e) => {
  // fires repeatedly during the drag
});

เหตุการณ์ dragend

dragend จะทำงานเมื่อผู้ใช้ปล่อยเมาส์ ไม่ว่าการวางจะสำเร็จหรือไม่ ใช้เหตุการณ์นี้เพื่อรีเซ็ตการตกแต่งขององค์ประกอบต้นทาง

card.addEventListener("dragend", (e) => {
  card.classList.remove("dragging");
});

การทำเครื่องหมายองค์ประกอบต้นทาง

รูปแบบที่ใช้กันทั่วไปคือ เพิ่มคลาสใน dragstart แล้วนำคลาสนั้นออกใน dragend เพื่อทำให้รายการที่กำลังลากมืดลงหรือเด่นชัดขึ้น

card.addEventListener("dragstart", () => card.classList.add("dragging"));
card.addEventListener("dragend", () => card.classList.remove("dragging"));

เอฟเฟกต์ที่อนุญาต

ตั้งค่า effectAllowed ใน dragstart เพื่อระบุว่าการดำเนินการใดใช้ได้บ้าง ได้แก่ "copy", "move", "link" หรือการผสมกัน

card.addEventListener("dragstart", (e) => {
  e.dataTransfer.effectAllowed = "move";
});

ข้อควรระวังสำหรับอุปกรณ์สัมผัส

API ในตัวมีการรองรับการสัมผัสบนอุปกรณ์เคลื่อนที่อย่างจำกัด สำหรับแอปที่เน้นการสัมผัส ควรพิจารณา Pointer Events หรือไลบรารีเฉพาะทาง ส่วน API ในตัวเหมาะอย่างยิ่งกับเดสก์ท็อป

การปิดใช้การเลือกข้อความ

การลากอาจทำให้เลือกข้อความโดยไม่ได้ตั้งใจ กฎ CSS ขนาดเล็กจะช่วยให้การลากไม่ถูกรบกวน

/* CSS */
.draggable { user-select: none; }

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบพื้นฐานการลาก

ทบทวน: การทำให้องค์ประกอบลากได้

คุณเปิดใช้การลากด้วย draggable="true" จัดการ dragstart/drag/dragend แนบข้อมูลด้วย dataTransfer.setData ตั้งค่า effectAllowed และตกแต่งองค์ประกอบต้นทางแล้ว ต่อไป: เป้าหมายการวาง

คำถามที่พบบ่อย

บทเรียน “การทำให้องค์ประกอบลากได้” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การทำให้องค์ประกอบลากได้” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส JavaScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การทำให้องค์ประกอบลากได้”

เปิดใช้การลากและจัดการเหตุการณ์การลาก คุณปฏิบัติ JavaScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน JavaScript Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน JavaScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การทำให้องค์ประกอบลากได้” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน JavaScript Academy นี้ได้ไหม

ได้ บทเรียน JavaScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การทำให้องค์ประกอบลากได้
  2. เป้าหมายการวางและ dataTransfer
  3. การตอบสนองด้วยภาพระหว่างลาก
  4. การลากไฟล์เข้าสู่หน้า
← กลับไปที่ JavaScript Academy