การเปลี่ยนมุมมองข้ามเอกสารช่วยให้คุณสร้างการเปลี่ยนภาพที่ราบรื่นเหมือนแอปได้ระหว่างหน้าต่างๆ ของแอปพลิเคชันแบบหลายหน้า (MPA) โดยค่าเริ่มต้น เบราว์เซอร์จะทำการเฟดแบบไขว้ แต่คุณสามารถปรับแต่งให้เข้ากับความสวยงามของเว็บไซต์ได้
ขั้นตอนการติดตั้งใช้งาน
1. เลือกใช้การเปลี่ยนมุมมองข้ามเอกสาร
ทั้งหน้าต้นทางและปลายทางต้องเลือกใช้ View Transitions เพื่อให้เบราว์เซอร์ทริกเกอร์การเปลี่ยนมุมมองในการนําทาง
/* Respect user's preference for reduced motion */
@media (prefers-reduced-motion: no-preference) {
/* Add to a global stylesheet shared by both pages */
@view-transition {
/* Enables transitions for same-origin navigations */
navigation: auto;
}
}
2. ปรับแต่งภาพเคลื่อนไหวการเปลี่ยนภาพ (ไม่บังคับ)
คุณสามารถกำหนดเป้าหมายสถานะเก่าและใหม่ของการเปลี่ยนผ่านโดยใช้องค์ประกอบจำลองเพื่อสร้างเอฟเฟกต์ เช่น สไลด์หรือการเปิดเผย
/* Customizing the outgoing page animation */
::view-transition-old(root) {
/* Move the old page out to the left */
animation: 0.4s ease-in both slide-out;
}
/* Customizing the incoming page animation */
::view-transition-new(root) {
/* Move the new page in from the right */
animation: 0.4s ease-out both slide-in;
}
@keyframes slide-out {
to { transform: translateX(-20%); opacity: 0; }
}
@keyframes slide-in {
from { transform: translateX(100%); }
}
3. สร้างการเปลี่ยนทิศทาง (ไม่บังคับ)
คุณอาจต้องการเอฟเฟกต์การเปลี่ยนที่แตกต่างกัน ทั้งนี้ขึ้นอยู่กับหน้าที่คุณกำลังไปยังส่วนต่างๆ เช่น เมื่อไปยังหน้าข้อมูลติดต่อจากหน้าแรก คุณอาจต้องการให้เนื้อหาใหม่ปรากฏขึ้นจากด้านขวา เมื่อกลับไปที่หน้าแรก การมีเอฟเฟกต์เดียวกันคงไม่สมเหตุสมผลนัก
หากหน้าเว็บที่คุณกำลังไปยังจะมีประเภทการเปลี่ยนเหมือนกันเสมอ ไม่ว่าคุณจะไปยังหน้าเว็บนั้นด้วยวิธีใดก็ตาม คุณสามารถระบุประเภทการเปลี่ยนด้วย types ในกฎ @view-transition
@media (prefers-reduced-motion: no-preference) {
@view-transition {
navigation: auto;
/* Specify the types of view transitions that will always be used on this page. */
types: previous;
}
}
นอกจากนี้ คุณยังระบุประเภทการเปลี่ยนภาพแบบมีเงื่อนไขภายใน Listener เหตุการณ์สำหรับ pagereveal ได้ด้วย
window.addEventListener("pagereveal", async (e) => {
if (e.viewTransition && window.navigation?.activation) {
// Use application-specific logic to compute a transition type
const transitionType = yourTransitionTypeLogic(navigation.activation.from, navigation.activation.entry);
e.viewTransition.types.add(transitionType);
}
});
จากนั้นใช้ตัวเลือกเทียม :active-view-transition-type() เพื่อใช้ภาพเคลื่อนไหวที่แตกต่างกันสำหรับแต่ละประเภท
:active-view-transition-type(next) {
&::view-transition-old(root) {
animation-name: slide-out-next;
}
&::view-transition-new(root) {
animation-name: slide-in-next;
}
}
:active-view-transition-type(previous) {
&::view-transition-old(root) {
animation-name: slide-out-previous;
}
&::view-transition-new(root) {
animation-name: slide-in-previous;
}
}
กลยุทธ์สำรอง
หากเบราว์เซอร์ไม่รองรับ View Transition หรือ View Transition ข้ามเอกสาร เบราว์เซอร์จะทำการนำทางหน้าเว็บแบบมาตรฐานทันที การเปลี่ยนมุมมองข้ามเอกสารเป็นการเพิ่มประสิทธิภาพแบบต่อเนื่อง โดยฟังก์ชันหลักของเว็บไซต์จะไม่ได้รับผลกระทบ
วิธีตรวจสอบการรองรับใน JavaScript
if ('onpagereveal' in window) {
// Browser supports cross-document view transitions
}
หากเบราว์เซอร์ไม่รองรับ Navigation API คุณจะใช้ API นี้เพื่อระบุประเภทการเปลี่ยนผ่านไม่ได้ ใช้วิธีอื่นในการกำหนดประเภทการเปลี่ยนผ่าน หรือระบุประเภทการเปลี่ยนผ่านสำรอง มิฉะนั้น เบราว์เซอร์จะทำการนำทางหน้าเว็บแบบมาตรฐานทันที
วิธีตรวจสอบการรองรับใน JavaScript
if (window.navigation?.activation) {
// Browser supports the Navigation API
}