ปัญหาการลากขอบซ้ายของ div และวิธีแก้ปัญหาเขียนโค้ด
นักพัฒนาเว็บแชร์ปัญหาการเขียนฟังก์ชัน JavaScript เพื่อปรับตำแหน่งและขนาดของ div ไปพร้อมกัน โดยพบปัญหาขยายผิดพลาด

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
- นักพัฒนาเผชิญปัญหาการลากขอบซ้ายของ div แล้วขนาดกว้างผิดพลาด
- การปรับค่า style.left และ style.width พร้อมกันทำให้การแสดงผลรวน
- ตัวแปร global เช่น g_strGrabbedBorder ใช้ตรวจสอบสถานะการลากเมาส์
- ชุมชน Dev.to เปิดพื้นที่ให้โปรแกรมเมอร์ร่วมแชร์ทางแก้ปัญหาทางเทคนิค
นักพัฒนาซอฟต์แวร์รายหนึ่งได้ออกมาแชร์ปัญหาผ่านแพลตฟอร์ม Dev.to เกี่ยวกับการเขียนฟังก์ชัน JavaScript เพื่อจัดการกับองค์ประกอบหน้าเว็บ โดยเฉพาะความพยายามในการลากขอบซ้ายของ div เพื่อปรับขนาดไปพร้อมกับการเปลี่ยนตำแหน่ง
ในโค้ดต้นฉบับ เงื่อนไขเช่น if (g_strGrabbedBorder == "") ถูกใช้งานเพื่อบ่งบอกว่าผู้ใช้งานกำลังลาก div ที่สร้างขึ้นแบบไดนามิกด้วยเมาส์ ซึ่งตัวแปรนี้เป็นตัวแปรสากลที่ถูกกำหนดค่าผ่านตัวจัดการเหตุการณ์คลิกปุ่มซ้ายของเมาส์ ซึ่งการลากย้ายตำแหน่งทั่วไปนั้นทำงานได้อย่างสมบูรณ์แบบไม่มีปัญหา
อย่างไรก็ตาม ปัญหาที่ซับซ้อนกว่านั้นเกิดขึ้นเมื่อต้องการทำทั้งการเปลี่ยนตำแหน่ง (reposition) และการปรับขนาด (resize) ของ div ไปพร้อมกันในเวลาเดียวกัน เมื่อขอบด้านซ้ายขยับไปทางขวา ความกว้างควรจะลดลงพร้อมกับตำแหน่งที่เลื่อนขวาตามไปด้วย

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
นักพัฒนาได้ระบุว่า การพยายามเปลี่ยนแปลงค่า div.left และ div.width พร้อมกัน ส่งผลให้องค์ประกอบบนหน้าเว็บแสดงผลผิดเพี้ยนไปอย่างมาก เช่น เมื่อพยายามลากขอบซ้ายไปทางขวา แต่ขอบด้านขวากลับขยับหนีไปทางขวาเร็วกว่า ทำให้ขนาดความกว้างของ div เพิ่มขึ้นแทนที่จะลดลงตามที่ตั้งใจไว้
ในเชิงการพัฒนาเว็บ การปรับตำแหน่งและขนาดขององค์ประกอบแบบ absolute positioning พร้อมกัน มักต้องคำนวณจุดอ้างอิง (origin point) ของเมาส์ให้สัมพันธ์กับผลต่าง (delta) ของพิกัด X เสมอ การเปลี่ยนแค่ความกว้างโดยไม่คำนวณตำแหน่ง left ชดเชยด้วยสัดส่วนที่ถูกต้อง จะทำให้เบราว์เซอร์คำนวณกล่องสี่เหลี่ยมเพี้ยน เนื่องจากเบราว์เซอร์ยึดขอบขวาเป็นหลักเมื่อความกว้างเพิ่มขึ้น
ปัญหาดังกล่าวทำให้ผู้พัฒนาเกิดความสับสนและคิดหาวิธีแก้ไม่ออก จนต้องนำมาตั้งกระทู้สอบถามความคิดเห็นและแลกเปลี่ยนแนวทางแก้ไขในชุมชนออนไลน์ของนักพัฒนาซอฟต์แวร์
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น