# 科技新知

滾動式動畫:Scroll Progress Timeline & View Progress Timeline

作者:Oliver Xiong

日期:2024-02-15T00:00:00.000Z


| 技術實現:滾動進度時間軸 Scroll Progress Timeline

當頁面或容器滾動時,會將滾動範圍中的位置轉換為百分比,並反映在動畫進度上。(滾動起始位置為 0 %、結束位置為 100 %。)

Scroll Timeline Progress Visualizer

Scroll Timeline Progress Visualizer


‧ 建立匿名時間軸

使用 scroll() 建立,並可傳遞 <scroller><axis> 兩個參數。

<scroller> 參數

<scroller> 參數

<axis> 參數

<axis> 參數

// 無參數
animation-timeline: scroll();

// 設定滾動容器
animation-timeline: scroll(nearest); // 預設
animation-timeline: scroll(root);
animation-timeline: scroll(self);

// 設定滾動方向
animation-timeline: scroll(block); // 預設
animation-timeline: scroll(inline);
animation-timeline: scroll(y);
animation-timeline: scroll(x);

// 同時設定滾動容器及方向
animation-timeline: scroll(block nearest); // 預設
animation-timeline: scroll(inline root);
animation-timeline: scroll(x self);

‧ 建立命名時間軸

使用 scroll-timeline-name 屬性指定滾動容器,屬性名稱必須以 -- 開頭來命名(如 CSS 變數),並通過 scroll-timeline-axis 設定滾動方向,兩者還可以簡寫成 animation-timeline 屬性。

// 滾動動畫
@keyframes animate-it {
  ...
}

// 滾動容器
.container {
  scroll-timeline-name: --my-scroller;
  scroll-timeline-axis: block;
 
  // 簡寫
  scroll-timeline: --my-scroller block;

  .elememt {
    animation: animate-it linear;
    animation-timeline: --my-scroller;
  }
}

| 技術實現:查看進度時間軸 View Progress Timeline

追蹤一個元素出現在滾動容器內的顯示比例,此時間軸從元素與滾動容器產生交集時開始,並於停止交會時結束。(元素進入容器前為 0 %、離開容器後為 100 %。)

View Timeline Progress Visualizer

View Timeline Progress Visualizer


‧ 建立匿名時間軸

使用 view() 建立,並可傳遞 <axis><view-timeline-inset> 兩個參數。

<axis> 參數

<axis> 參數

<inset> 參數

<inset> 參數

// 無參數
animation-timeline: view();

// 設定滾動方向
animation-timeline: view(block); // 預設
animation-timeline: view(inline);
animation-timeline: view(y);
animation-timeline: view(x);

// 設定元素的查看範圍
animation-timeline: view(auto); // 預設
animation-timeline: view(20%);
animation-timeline: view(200px);
animation-timeline: view(20% 40%);
animation-timeline: view(20% 200px);
animation-timeline: view(100px 200px);
animation-timeline: view(auto 200px);

// 同時設定滾動方向及查看範圍
animation-timeline: view(block auto); // 預設
animation-timeline: view(inline 20%);
animation-timeline: view(x 200px auto);

‧ 建立命名時間軸

與滾動進度時間軸的命名方式相似,可以使用 view-timeline-name 來命名,並使用 view-timeline-axisview-timeline-inset 來設定滾動方向和查看範圍。

// 滾動動畫
@keyframes animate-it {
  ...
}

// 元素
.element {
  // 創建 View Timeline
  view-timeline-name: --reveal;
  view-timeline-axis: block;

  // 動畫連結 View Timeline
  animation: animate-it linear auto both;
  animatiom-timeline: --reveal;
}

本文轉載自筆者的 Medium 文章,更詳細內容可點及連結前往查看。

更多資訊公告