มีอะไรใหม่เกี่ยวกับการเปลี่ยนมุมมอง (ข้อมูลอัปเดตเกี่ยวกับ Google I/O 2024)

เผยแพร่: 16 พฤษภาคม 2024

ในงาน Google I/O 2024 เราได้ประกาศเรื่องการเปลี่ยนผ่านมุมมองถัดไป นั่นคือการเปลี่ยนมุมมองข้ามเอกสารสำหรับแอปพลิเคชันแบบหลายหน้า (MPA)

นอกจากนี้ เรายังได้แชร์การปรับปรุงบางอย่างที่ช่วยให้คุณทำงานกับการเปลี่ยนมุมมองโดยทั่วไปได้ง่ายขึ้น

  • การแชร์สไตล์ภาพเคลื่อนไหวระหว่างองค์ประกอบจำลองการเปลี่ยนมุมมองด้วย view-transition-class
  • การเปลี่ยนมุมมองเฉพาะที่มีประเภทที่ใช้งานอยู่

การปรับปรุงเหล่านี้มีผลกับทั้งการเปลี่ยนมุมมองในเอกสารเดียวกันสําหรับแอปพลิเคชันหน้าเว็บเดียว (SPA) และการเปลี่ยนมุมมองข้ามเอกสารสําหรับ MPA

การเปลี่ยนมุมมองข้ามเอกสารสำหรับ MPA

การรองรับเบราว์เซอร์

  • Chrome: 126
  • Edge: 126
  • Firefox: ไม่สนับสนุน
  • Safari Technology Preview: รองรับ

ใน Chrome 111 ทีม Chrome ได้เปิดตัวการเปลี่ยนมุมมองเอกสารเดียวกันสําหรับแอปพลิเคชันหน้าเว็บเดียว ซึ่งเป็นฟีเจอร์ที่ชุมชนการสร้างเว็บให้การตอบรับเป็นอย่างดี

เราดีใจที่ได้เห็นว่าหลายๆ คนสร้างผลงานด้วยการเปลี่ยนมุมมอง ตั้งแต่การใช้งานทั่วไปที่ "ทำให้ภาพขนาดย่อกลายเป็นภาพขนาดใหญ่" ไปจนถึงประสบการณ์ที่สมจริงซึ่งปรับแต่งได้อย่างดี เช่น ภาพนี้จาก Airbnb เจ๋งมาก

การเปลี่ยนมุมมองเอกสารเดียวกันตามที่เห็นใน Airbnb

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

หากต้องการเปิดใช้การเปลี่ยนมุมมองข้ามเอกสาร ปลายทางทั้ง 2 ด้านต้องเลือกใช้ โดยให้ใช้ @view-transition at-rule และตั้งค่าตัวระบุ navigation เป็น auto

@view-transition {
  navigation: auto;
}

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

หากต้องการปรับแต่งการเปลี่ยนมุมมองข้ามเอกสาร ให้ใช้เหตุการณ์ pageswap และ pagereveal ซึ่งจะช่วยให้คุณเข้าถึงออบเจ็กต์การเปลี่ยนมุมมองได้

  • pageswap ช่วยให้คุณทำการเปลี่ยนแปลงในนาทีสุดท้ายในหน้าเว็บที่กำลังจะออกได้ก่อนที่ระบบจะจับภาพหน้าจอเก่า
  • คุณสามารถใช้ pagereveal เพื่อปรับแต่งหน้าใหม่ก่อนที่หน้าจะเริ่มแสดงผลหลังจากเริ่มต้นแล้ว

ในทั้ง 2 เหตุการณ์ คุณมีสิทธิ์เข้าถึงออบเจ็กต์ NavigationActivation เพื่อปรับแต่งการเปลี่ยนมุมมองข้ามเอกสารตามรายการประวัติปลายทางเก่าและใหม่ หรือประเภทการนําทาง

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

ได้

สาธิต

การสาธิตสแต็ก Navigator นี้รวมคุณลักษณะเหล่านี้ทั้งหมด (พร้อมการปรับปรุงบางอย่าง)

การบันทึกการสาธิตของ Stack Navigator ซึ่งจะใช้การเปลี่ยนมุมมองข้ามเอกสารที่ปรับแต่งในเหตุการณ์ pagereveal โดยอิงตามข้อมูลการเปิดใช้งานการนำทาง นอกจากนี้ ระบบจะใช้การแสดงผลล่วงหน้าด้วย

นี่คือ MPA ที่มีการไปยังส่วนต่างๆ ของเอกสารซึ่งโฮสต์อยู่ในต้นทางเดียวกัน เมื่อใช้ pagereveal ระบบจะกำหนดประเภทของภาพเคลื่อนไหวตามรายการประวัติปลายทางเก่าและใหม่

window.addEventListener("pagereveal", async (e) => {
  if (e.viewTransition) {
    // Determine animation type based on the old/new history entries
    const transitionClass = determineTransitionClass(navigation.activation.from, navigation.currentEntry);
    document.documentElement.dataset.transition = transitionClass;

    // Cleanup after transition ran
    await e.viewTransition.finished;
    delete document.documentElement.dataset.transition;
  }
});

อ่านเอกสารประกอบ

โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเปิดใช้งานและปรับแต่งการเปลี่ยนมุมมองข้ามเอกสารที่เอกสารประกอบเกี่ยวกับการเปลี่ยนมุมมองข้ามเอกสาร


ดูการปรับปรุงทรานซิชัน

นอกจากจัดส่งการเปลี่ยนมุมมองข้ามเอกสารสำหรับ MPA แล้ว Chrome ยังมีการปรับแต่งอีกเล็กน้อยเพื่อให้ทำงานกับการเปลี่ยนมุมมองโดยทั่วไปได้

การปรับปรุงเหล่านี้มีผลกับทั้งการเปลี่ยนมุมมองในเอกสารเดียวกันสําหรับ SPA และการเปลี่ยนมุมมองข้ามเอกสารสําหรับ MPA

แชร์สไตล์ภาพเคลื่อนไหวกับ view-transition-class

การรองรับเบราว์เซอร์

  • Chrome: 125
  • Edge: 125
  • Firefox: ไม่รองรับ
  • Safari Technology Preview: รองรับ

ก่อนหน้านี้ เมื่อสร้างภาพเคลื่อนไหวหลายภาพในลักษณะเดียวกัน คุณจะต้องกําหนดเป้าหมายภาพแต่ละภาพแยกกันโดยใช้ตัวเลือกเสมือนซ้ำสําหรับองค์ประกอบทุกรายการที่มี view-transition-name ที่ไม่ซ้ำกัน

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

#cards-wrapper > div {
  view-transition-class: card;
}
html::view-transition-group(.card) {
  animation-timing-function: var(--bounce);
}

ตัวอย่างการ์ดต่อไปนี้ใช้ view-transition-class เพื่อใช้ช่วงเวลาของภาพเคลื่อนไหวเดียวกันกับภาพนิ่งหลายภาพโดยใช้ตัวเลือกเดียว

การบันทึกการสาธิตการ์ด เมื่อใช้ view-transition-class ระบบจะใช้ animation-timing-function เดียวกันกับการ์ดทั้งหมด ยกเว้นการ์ดที่เพิ่มหรือนําออก

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับ view-transition-class โปรดอ่านเอกสารประกอบเฉพาะเกี่ยวกับ view-transition-class

การเปลี่ยนมุมมองแบบเลือกด้วยประเภทที่ใช้งานอยู่

การรองรับเบราว์เซอร์

  • Chrome: 125
  • Edge: 125
  • Firefox: ไม่รองรับ
  • Safari: 18.

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

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

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

ก่อนที่จะมีประเภทที่ใช้งานอยู่ คุณสามารถเพิ่มคลาสลงใน DOM และตอบสนองต่อคลาสเหล่านั้นใน CSS ได้ อย่างไรก็ตาม คุณยังจะต้องล้างข้อมูลหลังจากที่การเปลี่ยนแปลงเสร็จสิ้น

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

สำหรับการเปลี่ยนมุมมองในเอกสารเดียวกัน ให้ส่ง types ไปยังเมธอด startViewTransition ซึ่งตอนนี้ยอมรับออบเจ็กต์แล้ว update คือฟังก์ชัน Callback ที่อัปเดต DOM และ types คือสตริงตามลำดับ

const direction = determineBackwardsOrForwards();

const t = document.startViewTransition({
  update: updateTheDOMSomehow,
  types: ['slide', direction],
}););

สำหรับการเปลี่ยนมุมมองข้ามเอกสาร ให้ตั้งค่าประเภทในกฎ @view-transition โดยใช้ข้อบ่งชี้ types หรือตั้งค่าทันทีในเหตุการณ์ pageswap และ pagereveal

@view-transition {
  navigation: auto;
  types: slide, forwards;
}

เมื่อตั้งค่าประเภทแล้ว คุณจะตอบสนองต่อประเภทเหล่านี้ใน CSS ได้โดยใช้ตัวเลือกคลาสจำลอง :active-view-transition-type() และ :active-view-transition ซึ่งมีผลกับรูทการเปลี่ยนมุมมอง

/* Animation styles for forwards type only */
html:active-view-transition-type(forwards) {
  &::view-transition-old(content) {
    animation-name: slide-out-to-left;
  }
  &::view-transition-new(content) {
    animation-name: slide-in-from-right;
  }
}

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


ความคิดเห็น

เรายินดีรับฟังความคิดเห็นจากนักพัฒนาแอปเสมอ โดยให้แจ้งปัญหากับกลุ่มทํางาน CSS ใน GitHub พร้อมคําแนะนําและคําถาม ใส่ [css-view-transitions] ไว้หน้าปัญหา

หากพบข้อบกพร่อง ให้รายงานข้อบกพร่อง Chromium แทน