Timing Chart - แผนภาพเวลาเพื่อออกแบบ SMIL Animation บน SVG

Timing Chart - แผนภาพเวลาเพื่อออกแบบ SMIL Animation บน SVG

หมวดหมู่: บทความทั่วไปพัฒนาเว็บไซต์HTML5 and CSS3JavaScript อ่านจบใน 3 นาที

SMIL ยังคงเป็นทางเลือกที่น่าสนใจสำหรับการทำอนิเมชันใน SVG โดยเฉพาะเมื่อต้องการให้อนิเมชันทำงานได้แม้โหลดไฟล์ด้วย <img> ข้อดีคือสามารถขยับคุณสมบัติขององค์ประกอบใน SVG ได้เต็มที่โดยไม่พึ่ง JavaScript ในบทความนี้จะชี้ว่า SMIL มีจุดอ่อนเรื่องความซ้ำซ้อนของโค้ดและเสนอวิธีวางแผนอนิเมชันด้วย "timing chart" เพื่อทำให้ markup ดูแลได้ง่ายขึ้น พร้อมแนวทางจัดการการซิงค์เวลาและการรองรับความต้องการลดการเคลื่อนไหวของผู้ใช้

ทำไมใช้ SMIL กับ SVG

SVG เป็นองค์ประกอบกราฟิกที่ยืดหยุ่นกว่าแท็กกล่องทั่วไป - <circle> หรือเส้นทางต่างๆ ทำงานร่วมกับ CSS ได้หลายอย่าง แต่บางแอตทริบิวต์อย่าง viewBox ยังไม่มีตัวแทนใน CSS SMIL เข้ามาเติมเต็มช่องว่างนี้เพราะสามารถแอนิเมตทุกแอตทริบิวต์ภายใน SVG ได้โดยตรง แม้บางบราวเซอร์จะไม่รัน JavaScript เมื่อโหลดไฟล์ SVG ด้วย <img> แต่ SMIL และ CSS animation ยังคงทำงานได้ ซึ่งเหมาะกับอนิเมชันที่ไม่ต้องการสคริปต์เพิ่มเติม

วางแผนก่อนเขียน - Timing Chart

จุดอ่อนของ SMIL คือความอ้วนของ markup - แต่ละแท็กแอนิเมตได้เพียงคุณสมบัติเดียวต่อองค์ประกอบหนึ่งตัว วิธีแก้คือวางแผนทุกชิ้นส่วนก่อนเขียนจริง การใช้ timing chart ช่วยให้เห็นภาพเมื่อแต่ละชิ้นเริ่มและจบ เหมือนเส้นช่วงเวลาที่เรียงกันหรือทับซ้อนกัน คุณไม่จำเป็นต้องวาดตามสเกลเป๊ะๆ ตราบใดที่ความสัมพันธ์ของช่วงเวลากลุ่มย่อยชัดเจน การเขียนป้ายบอกความยาวของช่วงเวลาเป็นเทคนิคช่วยประหยัดเวลาที่ดี

การซิงค์เวลา - syncbase และ offsets

SMIL มีวิธีกำหนดจุดเริ่มต้นของอนิเมชันหลายแบบที่ช่วยเชื่อมชิ้นส่วนเข้าด้วยกัน หนึ่งในที่มีประโยชน์คือการใช้ค่า syncbase ซึ่งคือ ID ของแท็กตามด้วย .begin หรือ .end และสามารถใส่ offset ได้ เช่น หากต้องการให้อนิเมชันความทึบเริ่มก่อนอนิเมชันสีจะจบ 300 milliseconds ให้ตั้งค่าเป็น colorChange.end - 300ms วิธีนี้ทำให้ความสัมพันธ์ทางเวลาเป็นสิ่งที่ชัดเจนและแก้ไขได้ง่าย หากต้องการให้กลุ่มอนิเมชันทั้งหมดเริ่มสัมพันธ์กับอนิเมชันหลัก ให้อาศัยการตั้งค่า begin="primary.begin" หรือเลือก ID อย่าง #primary เพื่อให้ง่ายต่อการเลื่อนทั้งกลุ่มในคราวเดียว

การรองรับ prefers-reduced-motion และ fallback

การเคารพผู้ใช้ที่ตั้งค่า prefers-reduced-motion เป็นสิ่งสำคัญ บราวเซอร์รองรับฟีเจอร์นี้ค่อนข้างกว้างและควรคิดตั้งแต่แรกว่าจะรับมืออย่างไร ตัวเลือกมีหลายทางเช่นใช้ <picture> เพื่อสลับเป็นภาพนิ่งสำหรับผู้ใช้ลดการเคลื่อนไหว หรือใช้ CSS background-image และ media query @media (prefers-reduced-motion) เพื่อเปลี่ยนเป็นเวอร์ชันนิ่ง อีกทางคือใช้ JavaScript .matchMedia() ร่วมกับ SMIL DOM interface เพื่อควบคุมว่าอนิเมชันไหนถูกสตาร์ท วิธีที่เลือกควรประเมินข้อดีข้อเสียแต่เนิ่นๆ จะช่วยลดการแก้โค้ดซ้ำในภายหลัง

ตัวอย่างจริงในการใช้งานคือการสร้าง loading spinner ที่ประกอบด้วยสามจุดซึ่งใช้แอนิเมตแบบ opacity โดยแยกเป็นแท็ก <animate> หกแท็ก และตั้งชื่อ ID ที่มีแนวทางชัดเจน เช่น #fadeInLeft, #fadeOutLeft เพื่อให้ง่ายต่อการอ่านและบำรุงรักษา

สำหรับนักพัฒนาหน้าเว็บ การเข้าใจการวางแผนเวลาและการใช้ syncbase กับ SMIL จะเป็นทักษะที่ช่วยให้สร้างอนิเมชัน SVG ที่ซับซ้อนได้โดยไม่พึ่งสคริปต์มากนัก และยังช่วยออกแบบ fallback ที่เป็นมิตรต่อการเข้าถึง

สิ่งที่ต้องติดตามต่อ - เริ่มจากการร่าง timing chart สำหรับอนิเมชันที่คุณต้องการ แล้วทดลองใช้ syncbase กับ offsets ทั้งบวกและลบเพื่อตั้งค่าความสัมพันธ์เวลา สุดท้ายให้ทดสอบกับ prefers-reduced-motion และสภาพแวดล้อมการโหลดผ่าน <img> และ <picture> เพื่อหาวิธี fallback ที่เหมาะสม

ที่มา: Smashing Magazine - เรียบเรียงและสรุปเป็นภาษาไทยโดยทีมงาน IT Genius

ไอทีจีเนียส เอ็นจิเนียริ่ง (IT Genius Engineering) ให้บริการด้านไอทีครบวงจร ทั้งงานด้านการอบรม (Training) สัมมนา รับงานเขียนโปรแกรม เว็บไซต์ แอพพลิเคชั่น งานออกแบบกราฟิก และงานด้าน E-Marketing ที่กำลังได้รับความนิยมในปัจจุบัน ทั้ง SEO , PPC , และ Social media marketting

ติดต่อเราเพื่อสอบถามผลิตภัณฑ์ ขอราคา หรือปรึกษาเรื่องไอที ได้เลยค่ะ

Line : @itgenius (มี @ ด้านหน้า) หรือ https://lin.ee/xoFlBFe
Facebook : https://www.facebook.com/itgeniusonline
Tel : 02-570-8449 มือถือ 088-807-9770 และ 092-841-7931
Email : contact@itgenius.co.th

แนะนำหลักสูตรอบรมที่น่าสนใจ

user
โดย Admin ITGenius
เข้าชม 20 ครั้ง

คำค้นหา : SVGSMILanimationfront-endaccessibility