การเปลี่ยนมุมมองดวงดาว

Fred K Schott
Fred K Schott
Matthew Phillips
Matthew Phillips
Maxi Ferreira
Maxi Ferreira
Kara Erickson
Kara Erickson
Addy Osmani
Addy Osmani

วันนี้เราขอแชร์ข้อมูลเพิ่มเติมเกี่ยวกับเส้นทางของ Chrome และ Astro กับ View Transitions API ซึ่งรวมถึงวิธีที่ชุมชน Astro ยอมรับและทดลองใช้ API ตั้งแต่เนิ่นๆ เพื่อแสดงให้เห็นถึงศักยภาพของ API นี้ต่อชุมชนในวงกว้าง นอกจากนี้ เรายังยินดีที่จะได้แชร์ข้อมูลเพิ่มเติมเกี่ยวกับการรองรับการเปลี่ยนมุมมองในตัวแบบใหม่ใน Astro 3.0

ข้อมูลเบื้องต้น

การเปลี่ยนสถานะต่างๆ ของหน้าเว็บอย่างราบรื่นหรือที่เรียกว่าการเปลี่ยนสถานะเป็นองค์ประกอบที่ซับซ้อนในการสร้างประสบการณ์การใช้งานที่ราบรื่นและมีภาพเคลื่อนไหวบนเว็บเสมอมา แม้ว่าจะมีเครื่องมือต่างๆ เช่น การเปลี่ยน CSS, ภาพเคลื่อนไหว CSS และ Web Animation API แต่การสร้างการเปลี่ยนสถานะยังคงเป็นงานที่ยากอยู่ ปัญหาอย่างหนึ่งคือการจัดการการโต้ตอบกับองค์ประกอบขาออก ซึ่งอาจทําให้การเปลี่ยนผ่านมีความซับซ้อนมากขึ้น

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

View Transitions API จึงเกิดขึ้นเพื่อแก้ปัญหาเหล่านี้ในเบราว์เซอร์ API ใหม่นี้ช่วยให้เปลี่ยน DOM ได้ง่ายขึ้นในขั้นตอนเดียวขณะสร้างการเปลี่ยนภาพเคลื่อนไหวระหว่าง 2 สถานะ

การเปิดตัว View Transitions API ใน Chrome 111 เป็นจุดเริ่มต้นของวิสัยทัศน์ที่กว้างขึ้นสำหรับการรองรับการเปลี่ยนผ่านสำหรับเว็บไซต์ทั้งหมด ไม่ใช่แค่เว็บแอปพลิเคชันที่ใช้ JavaScript และเราจะทำการปรับปรุงเพิ่มเติมในอนาคตด้วย Chrome อาจเพิ่มฟีเจอร์ใหม่ๆ ที่น่าสนใจ เช่น การเปลี่ยนภาพในเอกสาร ภาพเคลื่อนไหวที่ขับเคลื่อนโดยคอมโพสิเตอร์ การเปลี่ยนภาพที่มีขอบเขต และกลุ่มการเปลี่ยนภาพแบบซ้อนกันในอนาคต

เมื่อใช้ View Transitions API การนำทางแอปพลิเคชันแบบหลายหน้าแบบดั้งเดิมจะราบรื่นเหมือนการใช้แอปเนทีฟ

ไปที่การสาธิต: เวอร์ชันที่ใช้จริง, แหล่งที่มา

การสํารวจระยะแรกที่มีการเปลี่ยนมุมมอง

เส้นทางของ Chrome กับ View Transitions API ไม่ได้เป็นเส้นทางเดียว ความคิดเห็นและการทํางานร่วมกันจากนักพัฒนาซอฟต์แวร์ ผู้เขียนเฟรมเวิร์ก และกลุ่มทํางาน CSS ล้วนมีบทบาทสําคัญในการกำหนดรูปร่างหน้าตาของฟีเจอร์นี้ตลอดหลายปีที่ผ่านมา

การทดสอบของนักพัฒนาแอปมีบทบาทสำคัญตั้งแต่เนิ่นๆ API เวอร์ชันแรกๆ ไม่รองรับภาพเคลื่อนไหว CSS และทรานซิชันถูกจํากัดไว้ที่ค่าที่กำหนดล่วงหน้าแบบจํากัดเพียงไม่กี่รายการ ความคิดเห็นในช่วงแรกแสดงให้เห็นอย่างชัดเจนว่านักพัฒนาแอปต้องการให้ทรานซิชันปรับแต่งได้อย่างเต็มที่และแสดงออกได้อย่างเต็มที่ การทำงานร่วมกันนี้ช่วยให้มั่นใจได้ว่า API ได้รับการออกแบบให้มีค่าเริ่มต้นที่ดี ความสามารถในการขยาย และการปรับแต่งอย่างสมดุล

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

เหตุผลที่ Astro เดิมพันกับการเปลี่ยนไปดูเนื้อหา

Astro มองหาฟีเจอร์อย่างการเปลี่ยนมุมมองมาอย่างยาวนาน Astro เป็นเฟรมเวิร์กเว็บ JavaScript ที่แสดงผลคอมโพเนนต์ UI บนเซิร์ฟเวอร์เป็น HTML ที่มีน้ำหนักเบาเพื่อให้หน้าเว็บโหลดได้เร็วขึ้น Astro ตั้งใจย้ายงานออกจากอุปกรณ์ของลูกค้าให้ได้มากที่สุด เว็บไซต์ Astro ใช้การนําทางหน้าเว็บของเบราว์เซอร์เอง ซึ่งเฟรมเวิร์กเว็บอื่นๆ อาจลักลอบใช้การนําทางของเบราว์เซอร์ด้วยการกำหนดเส้นทางฝั่งไคลเอ็นต์ JavaScript แทน

ข้อเสียนี้ทำให้เกิดปัญหาสําหรับทีม Astro ว่า Astro จะแสดงภาพเคลื่อนไหวการเปลี่ยนหน้าเว็บและคง UI ไว้อย่างถาวรในหน้าต่างๆ ได้อย่างไรโดยไม่ต้องใช้การกำหนดเส้นทางฝั่งไคลเอ็นต์

ALT_TEXT_HERE
ความท้าทายของการทำภาพเคลื่อนไหวการเปลี่ยนหน้าเว็บด้วย Astro

การเปลี่ยนมุมมองคือคำตอบ การเปลี่ยนมุมมองช่วยให้ Astro มีฟีเจอร์การกำหนดเส้นทางเดียวกับเฟรมเวิร์กเว็บ SPA ที่มี JavaScript จำนวนมาก แต่ไม่มีค่าใช้จ่ายเพิ่มเติมด้านประสิทธิภาพและความซับซ้อนของการกำหนดเส้นทางฝั่งไคลเอ็นต์ เฟรมเวิร์กอื่นๆ ถือว่าการเปลี่ยนเฟรมเป็นรายละเอียดการติดตั้งใช้งานที่ไม่บังคับ แต่สำหรับ Astro การเปลี่ยนเฟรมเป็นสิ่งที่สำคัญกว่ามาก

ALT_TEXT_HERE
ดูการเปลี่ยนเป็นคําตอบ

คำถามถัดไปที่ทีม Astro ต้องตอบคือ "อย่างไร" ทีมได้มองหาแรงบันดาลใจจากโปรเจ็กต์ต่างๆ เช่น Turbo, Swup และ Livewire รวมถึงสร้างต้นแบบแนวทางที่คล้ายกัน 2-3 รายการใน Astro

หนึ่งในความพยายามแรกๆ เกี่ยวข้องกับ "การเปลี่ยนผ่านอัจฉริยะ" แบบเต็มหน้าที่จะเปรียบเทียบหน้า HTML ใหม่ทุกหน้ากับ HTML ปัจจุบันโดยอัตโนมัติ จากนั้นพยายามแทนที่องค์ประกอบทุกรายการพร้อมกันโดยใช้ JavaScript วิธีการนี้มีความชาญฉลาด แต่มีแนวโน้มที่จะเกิดข้อผิดพลาด

// An early API design for enabling view transitions
// in Astro via top-level config. Never implemented.

export default defineConfig({
  router: 'spa'
})

โชคดีที่ชุมชน Astro แสดงให้เห็นว่า View Transitions API มีประสิทธิภาพอยู่แล้วโดยไม่ต้องทำให้ผลิตภัณฑ์มีความซับซ้อนมากเกินไป หลังจากดูการสาธิตเบื้องต้น ทีม Astro ก็ถูกใจแนวคิดของ Astro API ที่เรียบง่ายซึ่งสามารถจับคู่กับเบราว์เซอร์ API ได้ใกล้เคียงที่สุด แทนที่จะแสดงการเปลี่ยนมุมมองเป็นรายละเอียดการใช้งานที่มองไม่เห็นซึ่งซ่อนอยู่ใน Astro นักพัฒนาแอปอาจเห็นการเปลี่ยนมุมมองได้โดยตรง การปรับ Astro ให้สอดคล้องกับแพลตฟอร์มเว็บโดยตรงและลดความซับซ้อนโดยรวมในฝั่งไคลเอ็นต์

---
// Add a simple fade transition with 2 lines of code!
// 1. Import the <ViewTransitions> component
// 2. Add it to your common/base head component, or individual pages.

import { ViewTransitions } from 'astro:transitions';
---
<head>
  <title>My View Transitions Demo</title>
  <ViewTransitions />
</head>
<!-- ... -->

งานนี้กลายเป็นเรื่องง่าย: นำ View Transitions API ใหม่มาใช้ใน Astro และระบุทางเลือกสำรองอัตโนมัติที่จะนำไปสู่เว็บไซต์และเบราว์เซอร์มากที่สุด การสนับสนุนสำรองเป็นสิ่งจําเป็น เนื่องจากเบราว์เซอร์ส่วนใหญ่ (นอกเหนือจาก Chrome) ยังไม่รองรับการเปลี่ยนมุมมองแบบเนทีฟอย่างเต็มรูปแบบ

การเปิดตัวการสนับสนุนอย่างเป็นทางการใน Astro

Astro เปิดตัวการรองรับการเปลี่ยนมุมมองเวอร์ชันทดลองใน Astro 2.9 ผลลัพธ์เป็นบวกทันที นักพัฒนาซอฟต์แวร์เริ่มแชร์เดโมที่น่าทึ่งของกรณีการใช้งานที่หลากหลาย และบางกรณีก็นำไปใช้งานจริง

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

ไปที่การสาธิต: เวอร์ชันที่ใช้จริง, แหล่งที่มา

Astro 3.0 สิ้นสุดการรองรับและยกเลิกการแจ้งว่า View Transitions API เวอร์ชันใหม่ไม่เหมาะสมสำหรับทุกคน ตอนนี้ API ใหม่เหล่านี้พร้อมให้คุณนำไปใช้งานแบบทดลองหรือใช้งานพร้อมกันทั้งหมดแล้ว

<main transition:animate="slide">
  <p>Slide animation as you navigate to and from the page!</p>
</main>
<aside transition:name="my-aside">
  <p>Animate and morph the matching "my-aside" element across pages automatically!</p>
</aside>

ประโยชน์ที่ไม่คาดคิดของการปรับ Astro ให้สอดคล้องกับ API ของแพลตฟอร์มคือความสามารถในการทดลองสร้างฟีเจอร์ใหม่ๆ บน View Transitions API เดิม เช่น คำสั่ง transition:persist ของ Astro ใหม่ช่วยให้องค์ประกอบใดๆ คงอยู่ตลอดการนําทางทั้งหน้า ซึ่งจะขับเคลื่อนองค์ประกอบที่มีอายุการใช้งานยาวนาน เช่น โปรแกรมเล่นเสียงและวิดีโอแบบถาวร ซึ่งก่อนหน้านี้ทำได้เฉพาะใน SPA ที่ใช้ JavaScript ที่มีขนาดใหญ่

<video controls="" autoplay="" transition:persist>
  <source src="https://ia804502.us.archive.org/33/items/GoldenGa1939_3/GoldenGa1939_3_512kb.mp4" type="video/mp4">
</video>
Astro 3.0 รองรับองค์ประกอบ HTML ที่คงอยู่ตลอดการไปยังส่วนต่างๆ ของหน้าเว็บ เมื่อเก็บคอมโพเนนต์ UI แบบอินเทอร์แอกทีฟไว้ ระบบจะเก็บสถานะของคอมโพเนนต์เหล่านั้นด้วย

ไปที่การสาธิต: เวอร์ชันที่ใช้จริง, แหล่งที่มา

นอกจากนี้ Astro ยังปรับการเปลี่ยนมุมมองให้เหมาะกับนักพัฒนาแอปมากขึ้นได้อีกด้วย ตัวอย่างเช่น ทีมได้เพิ่มการรองรับภาพเคลื่อนไหวแบบกรอไปข้างหน้า/กรอกลับที่กำหนดเองและภาพเคลื่อนไหวสำหรับ HTML แบบไดนามิกแล้ว ฟีเจอร์ทั้ง 2 อย่างนี้ทําได้ยากด้วย API ระดับล่างเพียงอย่างเดียว แต่ทําได้อย่างง่ายดายใน Astro

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

สิ่งที่จะเกิดขึ้นต่อไป

อนาคตของการเปลี่ยนมุมมองบนเว็บสดใส Astro, Nuxt และ HTMX ทั้งหมดรองรับในระดับหนึ่ง และอีกหลายแพลตฟอร์มก็แสดงความสนใจ

ทีม Chrome ยินดีอย่างยิ่งที่ Astro รองรับการเปลี่ยนมุมมองแบบเนทีฟ นี่เป็นก้าวสําคัญสําหรับการพัฒนาเว็บ ซึ่งช่วยให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ราบรื่นและไดนามิกมากขึ้น นักพัฒนาแอป เราขอแนะนำให้คุณลองใช้การเปลี่ยนมุมมองใน Astro 3.0 ไม่ว่าจะสร้างหน้า Landing Page ใหม่หรืออัปเกรดเว็บไซต์ที่มีอยู่ การปรับปรุงเหล่านี้จะทําให้ทุกอย่างเปลี่ยนแปลงไป การเปลี่ยนมุมมองช่วยเติมเต็มช่องว่างระหว่างสิ่งที่เป็นไปได้ด้วย SPA และ MPA Chrome ยินดีรับฟังความคิดเห็นจากคุณว่ายังมีช่องโหว่อื่นๆ ในการรองรับ SPA และ/หรือ MPA หรือไม่ โปรดแสดงความคิดเห็นใน View Transitions WICG GitHub repo เพื่อพูดคุยเรื่องนี้เพิ่มเติม

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

ข้อมูลอ้างอิงเพิ่มเติม