การทำให้องค์ประกอบลากได้
เปิดใช้การลากและจัดการเหตุการณ์การลาก
การทำให้องค์ประกอบลากได้ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การทำให้องค์ประกอบลากได้
- เป้าหมายการวางและ dataTransfer
- การตอบสนองด้วยภาพระหว่างลาก
- การลากไฟล์เข้าสู่หน้า