查看轉換用個案研究

Swetha Gopalakrishnan
Swetha Gopalakrishnan
Saurabh Rajpal
Saurabh Rajpal

畫面轉場效果會呈現動畫,並在網頁或應用程式 UI 的不同狀態之間切換。View Transitions API 旨在協助您以比以往更直接且高效的方式建立這類效果。與先前的 JavaScript 方法相比,這個 API 有許多優點,包括:

  • 改善使用者體驗:流暢的轉場效果和視覺提示引導使用者瞭解 UI 的變更,使瀏覽體驗更加自然且不穩定。
  • 視覺連貫性:維持檢視畫面之間的連續性,可以降低認知負載,並協助使用者留在應用程式內。
  • 效能:API 會盡量減少使用主要執行緒資源,讓動畫更流暢。
  • 符合現代美感:經過改善的轉場效果可改善使用者體驗,且更具吸引力。

瀏覽器支援

  • 111
  • 111
  • x
  • x

來源

這篇系列文章探討電子商務公司如何運用新的 CSS 和 UI 功能提升網站成效。在本文中,我們會探討部分公司如何實作 View Transitions API 帶來的好處。

redBus

redBus 一向致力於盡可能地提供原生體驗和網頁體驗。在 View Transitions API 導入之前,想在網站素材資源中實作這些動畫並不容易。不過,透過這個 API,我們發現若要跨多個使用者歷程建立轉場效果,將能讓網站體驗更接近應用程式。上述所有優勢再加上效能優勢,所以為所有網站都必須具備此功能。redBus 資深工程經理 Amit Kumar

該團隊在多個地方導入了檢視畫面轉場效果,以下範例是首頁登入圖示的淡入和滑入動畫。

當使用者按一下 redBus 首頁上的登入圖示時,淡入/滑入轉場效果。

程式碼

此實作會使用多個view-transition-name和自訂動畫 (scale-downscale-up)。使用 view-transition-name 搭配不重複的值,將登入元件與網頁的其他部分分開,以建立動畫。建立新的不重複 view-transition-name 也會在虛擬元素樹狀結構中建立新的 ::view-transition-group (如以下程式碼所示),以便從預設的 ::view-transition-group(root) 之外加以操控。

::view-transition
├─::view-transition-group(root)
│ └─…
├─::view-transition-group(signin)
│ └─…
└─::view-transition-group(signinclose)   
└─…
//Code for VT for login
  if (!document.startViewTransition) {
   this.setState(
     {
       closeSigninModal: condition ? true : false
     },
     () => {
       if (closeSigninCb) {
         closeSigninCb();
       }
     }
   );
 } else {
   const transition = document.startViewTransition();
   transition.ready.finally(() => {
     setTimeout(() => {
       this.setState(
         {
           closeSigninModal: condition ? true : false
         },
         () => {
           if (closeSigninCb) {
             closeSigninCb();
           }
         }
       );
     }, 500);
   });
 }

.signin_open {
 view-transition-name: signin;
}

.signin_close  {
 view-transition-name: signinclose;
}

::view-transition-group(signin),
::view-transition-group(signinclose) {
 animation-duration: 0.5s;
}

::view-transition-old(signin) {
 animation-name: -ua-view-transition-fade-out, scale-down;
}
::view-transition-new(signin) {
 animation-name: -ua-view-transition-fade-in, scale-up;
}

::view-transition-new(signinclose) {
 animation-name: -ua-view-transition-fade-out, scale-down;
}

@keyframes scale-down {
 to {
     scale: 0;
 }
}

@keyframes scale-up {
 from {
     scale: 0;
 }
}

Tokopedia

團隊運用檢視畫面轉場效果,在使用者切換產品縮圖時加入淡出的動畫效果。

實作流程非常簡單,透過使用 startViewTransition 後,我們立即可得到比先前的實作更流暢的淡出轉換,而沒有任何影響,也就是 Tokopedia 資深軟體工程師 Andy Wihalim

完成前

更新後

程式碼

以下程式碼使用 React 架構,並包含架構專屬程式碼,例如 flushSync.。進一步瞭解如何使用架構來實作檢視畫面轉換。此為基本實作,可檢查瀏覽器是否支援 startViewTransition,如果支援,轉換是否轉換。否則會改回預設行為。

const handleClick =
  ({ url, index }) =>
  () => {
    if ('startViewTransition' in document) { //check if browser supports VT
      document.startViewTransition(() => {
        flushSync(() => {
          setDisplayImage({ url, index });
          setActiveImageIndex(index);
        });
      });
    } else { //if VT is not supported, fall back to default behavior
      setDisplayImage({ url, index });
      setActiveImageIndex(index);
    }
  };

...

<Thumbnail onClick={handleClick({url, index})} />

政策博薩爾

Policybazaar 的投資產業已將 View Transitions API 用於「選購理由」等說明元素,讓這些功能的視覺體驗更吸引人,並改善這類功能的使用情形。

我們整合了 View 轉場效果,移除了用於管理不同狀態動畫的重複 CSS 和 JavaScript 程式碼。省下的開發心力,並大幅改善使用者體驗。—Policybazaar 技術主管 Aman Soni

查看投資資訊頁面上「Why from Policybazaar」行動號召的轉場動畫。

程式碼

下列程式碼與先前的範例類似。請注意,您可以覆寫 ::view-transition-old(root)::view-transition-new(root) 的預設樣式和動畫。在這種情況下,預設的 animation-duration 已更新為 0.4 秒。

togglePBAdvantagePopup(state: boolean) {
  this.showPBAdvantagePopup = state;

  if(!document.startViewTransition) {
    changeState();
    return;
  }

  document.startViewTransition(() => {changeState();});

  function changeState() {
    document.querySelector('.block_section').classList.toggle('hide');
    document.querySelector('.righttoggle_box').classList.toggle('show');
  }
}
.righttoggle_box{
  view-transition-name: advantage-transition;
}

.block_section{
  view-transition-name: advantage-transition;
}

::view-transition-old(root), ::view-transition-new(root) {
  animation-duration: 0.4s;
}

使用 View Transitions API 時的注意事項

在同一個頁面上使用多種檢視畫面轉場效果時,請務必為每個效果或區段使用不同的檢視畫面轉換名稱,以免發生衝突。

當檢視畫面轉場效果 (轉換) 時,系統會在 UI 的其餘部分上新增圖層。因此,請避免在懸停時觸發轉換,因為 mouseLeave 事件會意外觸發 (當實際的遊標尚未移動時)。

資源

請瀏覽本系列的其他文章,瞭解使用新的 CSS 和 UI 功能 (例如捲動式動畫、彈出式視窗、容器查詢和 has() 選取器) 可帶來哪些益處的電子商務公司。