สร้าง Accordion เฉพาะที่มีองค์ประกอบ
หลายรายการที่มี name
เดียวกัน
แอคคอร์เดียน
รูปแบบ UI ที่พบได้ทั่วไปบนเว็บคือคอมโพเนนต์แบบ Accordion องค์ประกอบนี้ประกอบด้วยวิดเจ็ตการเปิดเผยข้อมูลหลายรายการที่ขยาย (หรือยุบ) ทีละรายการเพื่อแสดง (หรือซ่อน) เนื้อหาได้
หากต้องการใช้รูปแบบนี้บนเว็บ คุณจะต้องรวมองค์ประกอบ
2-3 รายการเข้าด้วยกัน และมักจะจัดกลุ่มองค์ประกอบเหล่านั้นเข้าด้วยกันเพื่อแสดงให้เห็นว่าองค์ประกอบเหล่านั้นเป็นของกันและกัน
แอคคอร์เดียนสุดพิเศษ
Browser Support
รูปแบบของ Accordion อีกรูปแบบหนึ่งคือ Accordion แบบพิเศษ ซึ่งจะเปิดวิดเจ็ตการเปิดเผยได้เพียงรายการเดียวพร้อมกัน
หากต้องการสร้าง Accordion เฉพาะในเว็บ ให้เพิ่มแอตทริบิวต์ name
ลงในองค์ประกอบ
เมื่อใช้แอตทริบิวต์นี้ องค์ประกอบ
หลายรายการที่มีค่า name
เดียวกันจะจัดกลุ่มตามความหมายและจะทํางานแบบ Accordion ที่ไม่ซ้ำกัน เมื่อคุณเปิดองค์ประกอบ
รายการใดรายการหนึ่งจากกลุ่ม รายการที่เปิดไว้ก่อนหน้านี้จะปิดโดยอัตโนมัติ
Welcome to Learn CSS!
…
Box Model
…
Selectors
…
หน้าเว็บหนึ่งๆ อาจมี Accordion ที่ไม่ซ้ำกันหลายรายการ เมื่อใดก็ตามที่คุณใช้ค่า name
ใหม่ในองค์ประกอบ
ระบบจะสร้างกลุ่มเชิงตรรกะใหม่
องค์ประกอบ
ที่อยู่ใน Accordion แบบพิเศษไม่จำเป็นต้องเป็นองค์ประกอบพี่น้อง โดยอาจกระจายอยู่ในเอกสาร แอตทริบิวต์ name
จะเป็นตัวจัดกลุ่ม ไม่ใช่ลําดับ DOM
แสดงโฆษณาแบบพุลฟิลสำหรับแอคคอร์เดียนเฉพาะ
JavaScript ต่อไปนี้ช่วยให้คุณโพลีฟีลลักษณะการทํางานของ Accordion แบบพิเศษได้ โค้ดใช้เหตุการณ์ toggle
ขององค์ประกอบ
เมื่อองค์ประกอบ
ที่มี name
เปิดขึ้น โค้ดจะค้นหาองค์ประกอบ
อื่นๆ ที่เปิดอยู่ซึ่งมีค่าแอตทริบิวต์ name
เดียวกันและปิดองค์ประกอบเหล่านั้น
document.querySelectorAll("details[name]").forEach(($details) => {
$details.addEventListener("toggle", (e) => {
const name = $details.getAttribute("name");
if (e.newState == "open") {
document
.querySelectorAll(`details[name=${name}][open]`)
.forEach(($openDetails) => {
if (!($openDetails === $details)) {
$openDetails.removeAttribute("open");
}
});
}
});
});
เบราว์เซอร์บางเวอร์ชันเก่าจะไม่เรียกเหตุการณ์ toggle
นี้ ในเบราว์เซอร์เหล่านั้น โค้ด polyfill จะไม่ทํางาน ในแง่ของการเพิ่มประสิทธิภาพแบบเป็นขั้นเป็นตอน ลักษณะการทำงานนี้เป็นสิ่งที่ยอมรับได้