在檢視畫面之間製作動畫

瞭解如何在應用程式中以動畫呈現兩個檢視畫面。

Paul Lewis

通常您會希望讓使用者切換應用程式的檢視畫面,例如從清單前往詳細資料檢視畫面,或顯示側欄導覽。在這些檢視畫面之間播放動畫可保持使用者的參與度,並為專案增添更多生命。

  • 使用平移在檢視畫面之間移動;避免使用 lefttop 或任何其他會觸發版面配置的屬性。
  • 確保使用的所有動畫都能流暢播放,且時間長度保持短。
  • 請考量動畫和版面配置的變化,隨著螢幕尺寸的增加而改變;適合小螢幕的做法在電腦版上可能有些奇怪。

檢視畫面轉場效果和運作方式,取決於您處理的檢視畫面類型。舉例來說,在檢視畫面上為強制回應重疊元素建立動畫效果,就跟在清單檢視和詳細資料檢視畫面之間切換時一樣。

使用翻譯功能切換檢視畫面

在兩個檢視畫面之間進行翻譯。

為了方便起見,假設有兩個檢視畫面:清單檢視和詳細資料檢視。當使用者輕觸清單檢視畫面中的清單項目時,詳細資料檢視畫面會滑入,清單檢視則會滑出。

檢視區塊階層。

為達成此效果,兩個檢視畫面都需要有 overflow: hidden 的容器。這樣一來,這兩個檢視畫面都可以並排在容器中並排,而且不會顯示任何水平捲軸,而且每個檢視畫面都能視需要在容器內左右滑動。

容器的 CSS 如下:

.container {
  width: 100%;
  height: 100%;
  overflow: hidden;
  position: relative;
}

容器的位置設為 relative。這表示內部的每個檢視畫面都可以絕對放置在左上角,然後隨著轉換進行移動。這種做法比使用 left 屬性更出色,因為會觸發版面配置和繪製作業,而且通常較容易合理化。

.view {
  width: 100%;
  height: 100%;
  position: absolute;
  left: 0;
  top: 0;

  /* let the browser know we plan to animate
     each view in and out */
  will-change: transform;
}

transform 屬性中加入 transition,即可產生效果絕佳的投影片效果。為了營造良好的氛圍,它會使用自訂的 cubic-bezier 曲線,如自訂加/減速指南所述。

.view {
  transition: transform 0.3s cubic-bezier(0.465, 0.183, 0.153, 0.946);
}

畫面外的檢視畫面應轉譯為右側,因此在這種情況下,必須移動詳細資料檢視畫面:

.details-view {
  transform: translateX(100%);
}

現在需要少量的 JavaScript 來處理類別。這會在檢視畫面中切換適當的類別。

var container = document.querySelector('.container');
var backButton = document.querySelector('.back-button');
var listItems = document.querySelectorAll('.list-item');

/**
    * Toggles the class on the container so that
    * we choose the correct view.
    */
function onViewChange(evt) {
    container.classList.toggle('view-change');
}

// When you click a list item, bring on the details view.
for (var i = 0; i < listItems.length; i++) {
    listItems[i].addEventListener('click', onViewChange, false);
}

// And switch it back again when you click the back button
backButton.addEventListener('click', onViewChange);

最後,我們為這些類別加入 CSS 宣告。

.view-change .list-view {
  transform: translateX(-100%);
}

.view-change .details-view {
  transform: translateX(0);
}

試用

您可以擴大此功能涵蓋多個檢視畫面,而基本概念應保持不變;每個不可見的檢視畫面都應在畫面外開啟,並視需要移開目前的畫面。

除了在檢視畫面之間切換,這項技巧也可以套用至其他滑入式元素,例如側欄導覽元素。唯一的差別在於,您不需要移動其他檢視畫面。

確認動畫可在大型螢幕上運作

大型螢幕上的檢視區塊階層。

如果螢幕較大,請一律保留清單檢視畫面,而非移除,並將右側詳細資料檢視畫面滑動。做法與處理導覽檢視幾乎相同。