14
Re:Nuxt 100 天練習曲
Day 14

更上一層樓的轉場動畫 (進階篇)

Day 14·版型轉場·View Transitions

1. 當整個場景都變了:版型轉場

什麼時候會用到它?當您切換的兩個頁面,連版型 (Layout) 都不一樣時。

例如,從有導航列和頁尾的「一般頁面」,切換到一個完全無邊框、置中的「登入頁面」。在這種整個「場景」都換掉的情況下,就需要用到版型轉場。

好消息是,它的設定方式和頁面轉場幾乎一模一樣,只是關鍵字不同。

1

在 nuxt.config.ts 中啟用

nuxt.config.ts
export default defineNuxtConfig({
  app: {
    // ...之前的 pageTransition 設定
    // 啟用版型轉場,並命名為 'layout'
    layoutTransition: { name: 'layout', mode: 'out-in' }
  }
})
2

用 CSS 編排動畫

CSS 樣式
/* 這次的 class 名稱是 layout 開頭 */
.layout-enter-active,
.layout-leave-active {
  transition: all 0.4s;
}
.layout-enter-from,
.layout-leave-to {
  filter: grayscale(1); /* 換個新效果:灰階 */
}

現在,當您在不同版型的頁面間切換時,就會看到這個灰階的轉場效果了。

2. 未來的轉場特效:View Transitions API (實驗性)

接下來這個是重頭戲!這是瀏覽器原生提供的次世代轉場技術,非常強大,而 Nuxt 已經實驗性地支援它了!

如果說昨天的 CSS 轉場是讓「整個舞台」淡出再淡入,那 View Transitions 就像電影特效,可以讓舞台上的某個演員或道具(例如一張圖片),在下一個場景中,無縫地「變形」成另一個樣子。

這可以創造出極其流暢、令人驚豔的「共享元素轉場」效果。

如何啟用這個未來科技?

非常簡單,只需要在 nuxt.config.ts 中打開實驗性開關。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    // 將 viewTransition 設定為 true
    viewTransition: true
  }
})

然後呢?

就這樣!啟用後,Nuxt 會盡力為你的頁面切換加上流暢的原生過渡效果。您甚至不需要寫任何 CSS,瀏覽器就會預設一個簡單的交叉淡化 (cross-fade) 效果。

注意:因為這還是實驗性功能,在某些複雜情境下可能會有些小問題,但它代表了網頁動畫的未來,絕對值得我們關注和嘗試!

今日總結

今天我們學會了處理更複雜的轉場情境!

版型轉場 (Layout Transitions):當整個場景 (Layout) 都換掉時使用。

視圖轉場 (View Transitions):未來的趨勢,能創造出驚人的元素「變形」效果,且設定極其簡單。

至此,我們關於「轉場動畫」的旅程就告一段落。您已經擁有了讓網站從靜態變為動態,從生硬變為流暢的各種能力!