การเปลี่ยนมุมมอง SPA ลงจอดใน Chrome 111

View Transition API ช่วยให้คุณอัปเดต DOM ได้ในขั้นตอนเดียว พร้อมกับสร้างการเปลี่ยนแบบเคลื่อนไหวระหว่าง 2 สถานะ

การเปลี่ยนที่สร้างด้วย View Transition API ลองใช้เว็บไซต์เดโม - ต้องใช้ Chrome 111 ขึ้นไป

การเปลี่ยนรุ่นเหล่านี้เป็นฟีเจอร์ที่ขอกันเข้ามาบ่อยๆ จากนักพัฒนาซอฟต์แวร์ รวมถึงผมด้วย และผมคิดว่าเราสามารถนำมาใช้ในแบบที่สร้างความสมดุลระหว่างความสามารถในการขยายการใช้งานและการปรับแต่งให้เหมาะสม ดูเหมือนว่าเราจะต้องปรบมืออยู่เหมือนกัน แต่ความคิดเห็นของนักพัฒนาซอฟต์แวร์คือกุญแจสำคัญในการออกแบบฟีเจอร์นี้ ต้นแบบก่อนหน้านี้ของฟีเจอร์นี้มีความยืดหยุ่นน้อยกว่ามาก นอกจากนี้ เพื่อนๆ (เช่นคุณ) ที่สละเวลามาเล่นต้นแบบและแสดงความคิดเห็นทำให้เกิดการทบทวนอย่างสิ้นเชิง ขอขอบคุณ

หากต้องการทำความเข้าใจเกี่ยวกับฟีเจอร์นี้และเล่นการสาธิตบางส่วน โปรดดูคำแนะนำของเรา หากมีสิ่งใดที่คุณคิดว่าไม่ครอบคลุม โปรดติดต่อเราทาง Twitter, Mastodon หรือทางอีเมล

ปัจจุบัน View Transition API พร้อมใช้งานใน Chrome เท่านั้น โชคดีที่สามารถใช้เป็นการปรับปรุงแบบก้าวหน้า คู่มือนี้มีฟังก์ชันตัวช่วยที่คุณสามารถใช้ได้ในเบราว์เซอร์ต่างๆ แต่เฉพาะเบราว์เซอร์ที่รองรับการเปลี่ยนมุมมองเท่านั้นที่จะเห็นภาพเคลื่อนไหว

เราพัฒนาฟีเจอร์นี้ภายในคณะทำงานของ CSS โดยใช้ข้อมูลจากผู้ให้บริการเบราว์เซอร์และผู้ให้บริการอิสระรายอื่นๆ เราไม่รู้ว่าเบราว์เซอร์อื่นๆ จะใช้ View Transitions หรือไม่หรือเมื่อใด แต่โปรดติดตามตำแหน่งมาตรฐานของ Mozilla และตำแหน่งมาตรฐานของ WebKit ไว้

แต่เรายังไม่ 'เสร็จสิ้น'

ฟังก์ชันการทำงานที่อยู่ใน Chrome 111 เป็นเพียงรุ่นแรกเท่านั้น หวังว่าเราพบข้อบกพร่องทั้งหมดแล้ว แต่โปรดแจ้งปัญหาที่คุณพบที่ crbug.com โดยควรเป็นการสาธิตแบบลดลง หากคุณไม่ได้คุ้นเคยหรือสะดวกใจ โปรดติดต่อเราทาง Twitter, Mastodon หรือทางอีเมล เราพร้อมช่วยเหลือคุณ

การเปิดตัวนี้เป็นเพียงส่วนเล็กๆ แต่ก็หวังว่าจะเป็นประโยชน์ต่อภาพรวม เราได้ร่างส่วนขยายของฟีเจอร์นี้บางส่วนเอาไว้แล้วเพื่อให้มั่นใจว่าส่วนต่างๆ ที่เราจัดส่งในวันนี้จะใช้ร่วมกับอุปกรณ์ในอนาคตได้

นี่คือตัวอย่างสิ่งที่เรากำลังคิด คำแนะนำนี้ไม่ได้เรียงลำดับตามลำดับความสำคัญ (แต่เหตุผลแรกอาจสำคัญที่สุดสำหรับหลายๆ คน) เราจึงอยากทราบความคิดเห็นว่าส่วนใดเพิ่มเติมที่สำคัญต่อคุณที่สุด

การเปลี่ยนผ่านในเอกสาร

ผมคิดว่านักพัฒนาแอปส่วนใหญ่ต้องการให้เราทำการพัฒนานี้ต่อไป และข่าวดีก็คือเรากำลังพัฒนาอยู่

View Transitions API ได้รับการออกแบบให้ทำงานได้กับเอกสารต้นทางเดียวกัน ความแตกต่างเพียงอย่างเดียวคือ แทนที่จะส่งสัญญาณ startViewTransition ไปยังการเปลี่ยนแปลงสถานะ DOM แต่ตัวไปยังส่วนต่างๆ จะส่งสัญญาณว่ามีการเปลี่ยนแปลง

ต้นแบบของเราเบื้องหลัง Flag chrome://flags/#view-transition-on-navigation ต่อไปนี้เป็นการสาธิตง่ายๆ และการสาธิตที่ซับซ้อนยิ่งขึ้น

เพื่อก้าวไปข้างหน้า เราต้องพิจารณาว่าแต่ละหน้าเลือกใช้การเปลี่ยนแปลงนี้อย่างไร ขณะนี้เราใช้เมตาแท็ก <meta name="view-transition" content="same-origin"> แต่เราคิดว่า CSS เหมาะสมกว่า นอกจากนี้ เรายังต้องการทราบได้ง่ายขึ้นว่าคุณกําลังเปลี่ยนหน้ามาจากหน้าเว็บประเภทใดโดยไม่ต้องเขียน JavaScript

มีงานต้องทำมากมาย และเราต้องการให้ผลที่ 'ถูกต้อง' มากกว่า 'ความรวดเร็ว' แต่จริงๆ แล้วถือเป็นเรื่องสำคัญสำหรับเรา

ภาพเคลื่อนไหวที่ใช้การจัดวางองค์ประกอบ

เราเลือกสร้างภาพเคลื่อนไหวความกว้างและความสูงในกลุ่มการเปลี่ยนโดยค่าเริ่มต้นเนื่องจากปรับแต่งได้ง่ายกว่ามาก แต่หมายความว่าภาพเคลื่อนไหวจะทำงานบนเทรดหลัก ซึ่งไม่ค่อยเหมาะสม โดยเฉพาะระหว่างการโหลดหน้าเว็บ

เราวางแผนที่จะตรวจจับภาพเคลื่อนไหวเริ่มต้นและการปรับแต่งทั่วไป จากนั้นจะตีความใหม่เป็นภาพเคลื่อนไหวที่ใช้ตัวประมวลผลภาพเพื่อเพิ่มประสิทธิภาพให้ดียิ่งขึ้น

การเปลี่ยนที่กำหนดขอบเขต

ขณะนี้การเปลี่ยน SPA จะกำหนดขอบเขตของทั้งเอกสาร และจะดำเนินการเปลี่ยนได้ทีละรายการเท่านั้น เราขอแนะนําฟีเจอร์ที่ช่วยให้กำหนดขอบเขตการเปลี่ยนไปยังองค์ประกอบหนึ่งๆ ได้ เพื่อให้คอมโพเนนต์ของหน้าเว็บหลายรายการเรียกใช้การเปลี่ยนได้อย่างอิสระ

ซึ่งจะทำให้โปรแกรมเล่นวิดีโอแบบฝังสามารถใช้การเปลี่ยนมุมมองพร้อมกับวิดเจ็ตแชทที่ฝังได้

กลุ่มการเปลี่ยนที่ซ้อนกัน

ขณะนี้ ::view-transition-group ทั้งหมดเป็นพี่น้อง ซึ่งมักจะเป็นเรื่องที่ดี เนื่องจากจะทำให้มุมมองเปลี่ยนจากคอนเทนเนอร์หนึ่งไปอีกคอนเทนเนอร์หนึ่งได้ และคุณไม่ต้องกังวลเรื่องการตัดคลิป

อย่างไรก็ตาม ในบางครั้งคุณอาจต้องการให้มีการตัดมุมมองออกโดยผู้ปกครองบางคน ซึ่งอาจมีส่วนร่วมในการเปลี่ยนผ่านดังกล่าว

เราต้องการตรวจสอบการเลือกใช้ที่วาง ::view-transition-group หนึ่งๆ ไว้ใน ::view-transition-group อื่น

คลาสของการเปลี่ยน

view-transition-name แต่ละรายการต้องไม่ซ้ำกัน นี่คือวิธีที่เราระบุว่าองค์ประกอบหนึ่งๆ มีแนวคิด "เหมือนกัน" ในด้านใดด้านหนึ่งของการเปลี่ยนแปลง DOM แม้ว่าองค์ประกอบนั้นจะไม่ใช่องค์ประกอบเดียวกันก็ตาม

อย่างไรก็ตาม บางครั้งเนื้อหาที่มี view-transition-name ต่างกันก็ควรใช้ภาพเคลื่อนไหวประเภทเดียวกัน โดยในตอนนี้หมายความว่าให้เพิ่มกฎตัวเลือกสำหรับทุก view-transition-name

เราต้องการเพิ่มวิธีสร้างคลาสของการเปลี่ยนรุ่นเพื่อเอาชนะข้อจำกัดนี้

ไม่สนใจองค์ประกอบที่อยู่นอกหน้าจอ

หากคุณใส่ view-transition-name ให้องค์ประกอบ องค์ประกอบดังกล่าวจะมีส่วนร่วมในการเปลี่ยนในฐานะกลุ่มของตัวเอง บางครั้งอาจไม่เหมาะสม ตัวอย่างเช่น หากส่วนหัวเป็น view-transition-name แล้วเปลี่ยนจากสถานะที่คุณเลื่อนลงไป 2,000 พิกเซล ไปเป็นสถานะที่ด้านบนสุดของหน้า ส่วนหัวจะแสดงการเคลื่อนไหวจากห่างออกไป 2,000 พิกเซล ซึ่งรู้สึกว่าไม่ใช่เรื่องของช่วงเวลา

เราจึงต้องการเพิ่มการเลือกใช้โดยที่องค์ประกอบจะถูกละเว้นแทน เสมือนว่าองค์ประกอบไม่มี view-transition-name หากอยู่นอกวิวพอร์ตทั้งหมด

ซึ่งทำได้ด้วย JavaScript อยู่แล้วโดยการตั้งค่า style.viewTransitionName แบบไดนามิก แต่เราควรมีวิธีแก้ปัญหาที่แน่ชัดสำหรับเรื่องนี้

ภาพเคลื่อนไหวที่ขับเคลื่อนโดย requestAnimationFrame

คุณสามารถสร้างภาพเคลื่อนไหวแบบเปลี่ยนภาพด้วย JavaScript ผ่าน Web Animation API ได้อยู่แล้ว แต่บางครั้งคุณต้องการแสดงผลแบบเฟรมต่อเฟรมด้วย requestAnimationFrame

คุณทำได้อยู่แล้วค่ะ แต่อาจจะยากหน่อย นี่คือการสาธิตพร้อมผู้ช่วยที่อาจเห็นว่ามีประโยชน์ เราอยากให้แอปไม่ถูกแฮ็ก!

โดยเราจะแบ่งเป็น 2 ส่วน 1. มอบ API เพื่อระบุเมื่อภาพเคลื่อนไหวเสร็จสมบูรณ์ และข้อ 2 คือให้สิทธิ์เข้าถึง JavaScript แก่องค์ประกอบเทียม ส่วนที่ 2 นั้นอาจเป็นงานใหญ่พอสมควร แต่ก็รู้สึกว่าเป็นสิ่งที่ควรทำในระยะยาว

ทีนี้ก็ไปเปลี่ยนมุมมองเจ๋งๆ ได้เลย!

เราหวังว่าคุณคงตื่นเต้นเกี่ยวกับปัจจุบันและอนาคตของฟีเจอร์นี้เช่นเดียวกับเรา หากคุณมีความคิดเห็นใดๆ หรือเพียงแค่ต้องการอวดการเปลี่ยนมุมมองของคุณ ไม่ว่าจะราบรื่นและใช้งานได้ หรือแค่ไร้สาระ ไร้สาระ โปรดติดต่อเราทาง Twitter หรือ Mastodon