關於觀看轉換的誤解

View Transition API 是網路開發領域的重大突破。無論您的網站是單頁或多頁,這項強大的 API 都能讓您在檢視畫面之間建立流暢的轉場效果,打造吸引使用者的原生體驗。目前可在 Chrome 中使用,不久後 Safari 也將提供相同的文件檢視轉場效果。

越來越多人開始研究 View Transition API,因此我們想澄清一些誤解。

誤解 1:View Transition API 會擷取螢幕截圖

執行檢視畫面轉場時,API 會擷取內容的舊狀態和新狀態快照。這些快照隨後會顯示動畫,詳情請參閱說明文件的「這些轉換的運作方式」一節

雖然您可以將舊快照稱為螢幕截圖,但新快照並非螢幕截圖,而是節點的即時呈現。您可以將其視為已取代的元素。

::view-transition
└─ ::view-transition-group(root)
   └─ ::view-transition-image-pair(root)
      ├─ ::view-transition-old(root) 👈 Screenshot
      └─ ::view-transition-new(root) 👈 Live representation

有了這個即時功能,像這樣的示範才能運作:在檢視畫面轉換時,系統會持續播放來自新快照的影片。

正在播放影片,參與觀看轉換效果 Minimal 示範來源

相關邏輯和 CSS 的詳細資訊請參閱說明文件

迷思 2:擷取多個元素會導致多個檢視畫面轉場效果執行

擷取多個元素時,快照程序會擷取所有舊狀態和新狀態。除了 :root 元素,如果您擷取 .box,就會得到這個虛擬樹狀結構:

::view-transition
└─ ::view-transition-group(root)
|  └─ ::view-transition-image-pair(root)
|     ├─ ::view-transition-old(root)
|     └─ ::view-transition-new(root)
└─ ::view-transition-group(box)
   └─ ::view-transition-image-pair(box)
      ├─ ::view-transition-old(box)
      └─ ::view-transition-new(box)

這個樹狀結構含有多個快照組合,但系統只會執行單一檢視畫面轉換。

目前,Chrome 只能同時執行每個文件的一個檢視畫面轉場效果。在這個示範中快速點選所需項目,啟動新的檢視畫面轉換效果。您會發現,當新的轉場動畫開始時,目前的轉場動畫會跳到結尾。

誤解 3:由於瀏覽器支援,因此無法實作檢視畫面轉場效果

許多開發人員擔心無法實作檢視畫面轉場效果,因為這項功能僅支援 Chrome。好消息是,Safari 已加入這項功能,並將在即將推出的 Safari 18 版本中加入。

不過,請不要因為瀏覽器支援不穩定,就停止實作轉場效果。檢視轉場效果是漸進式增強的絕佳素材。原始說明文件會分享將此方法加入程式碼的方法。

function handleClick(e) {
    // Fallback for browsers that don't support this API:
    if (!document.startViewTransition) {
        updateTheDOMSomehow();
        return;
    }

    // With a View Transition:
    document.startViewTransition(() => updateTheDOMSomehow());
}

如果您的瀏覽器支援相同文件檢視畫面轉場效果,您就會看到經過強化的動畫版本。如果瀏覽器不支援,就無法使用目前的版本。隨著越來越多的瀏覽器支援檢視轉換功能,越來越多使用者自動體驗這個充實完的內容。

跨文件檢視畫面轉場也適用相同的規則。不支援這類功能的瀏覽器會在剖析樣式表時忽略 CSS 選擇加入功能。

這份個案研究詳細說明瞭這種做法如何成功應用於電子商務

錯誤觀念 4:檢視轉場會中斷逐步轉譯

有人聲稱檢視畫面轉場會中斷增量算繪。這並非事實:跨文件檢視轉場效果已指定為不會破壞網站的這項基本層面。

瀏覽器會在取得「足夠」的內容後開始轉譯網頁。在大多數瀏覽器中,這表示在載入 <head> 中的所有樣式表單、剖析 <head> 中的所有轉譯阻斷 JavaScript,以及載入足夠的標記之後。跨文件檢視畫面轉場不會改變這項情況:首次顯示內容所需的內容不會變更。首次轉譯後,瀏覽器可以並逐步轉譯新收到的內容。

您可以選擇在 DOM 中出現特定元素前,先阻擋轉譯作業。如果您想確保參與檢視畫面轉場的元素會出現在新頁面上,這項功能就很實用。

如要這麼做,請使用這個連結標記:

<link rel="expect" blocking="render" href="#elementId">

這會覆寫瀏覽器用來決定首次轉譯時間的瀏覽器經驗法則:首次轉譯會延遲到指定元素出現在 DOM 樹狀結構中。

這項手動封鎖功能內建了一些保護機制。舉例來說,如果系統看到結束 </html> 標記,但未看到阻擋元素,則算繪作業就不會再遭到阻擋。此外,您也可以自行新增逾時邏輯,隨時移除阻擋屬性。

顯然,您應謹慎使用轉譯阻斷功能。阻斷轉譯的影響必須視個案情況評估。根據預設,除非您可積極評估及評估這項行為對成效指標的影響,否則請避免使用 blocking=render

誤解 5:建立快照的程序很慢或成本高昂

當 View Transition API 準備新檢視畫面並取得快照時,使用者仍可看到舊檢視畫面。因此,使用者會比沒有檢視轉場效果時多看到舊版網頁一點。不過,這項延遲時間非常短,實際上只有幾格。以 Chrome 為例,pageswap 的影響最多有兩個:一個用於執行邏輯,再加上一個用來確保快照經過合成及快取的額外影格。

此外,快照的資料會直接從合成器取得,因此不需要額外的版面配置或重繪步驟,就能取得快照資料。

額外誤解:這是 View Transitions API

談論檢視畫面轉場時,大家通常會提到「View Transitions API」。這項資訊不正確。這個 API 稱為「View Transition API」,請注意「Transition」這個單數字詞。

這個錯誤觀念源自於某些文章 (包括我們在 DCC 上的文件) 使用錯誤的術語。

要記住正確的名稱,訣竅就是使用 (一個) View Transition API 建立 (一或多個) 檢視畫面轉場效果。