前言 #
今天要來介紹 Scroll Progress,在長篇內容或多段落的頁面中你常常會看到它的存在,目的是讓使用者知道自己目前閱讀的位置。它能夠根據捲動進度,動態顯示使用者在頁面中的位置。這樣的設計不僅提升閱讀體驗,也能為整體介面增添互動感。接下來就一步一步來跟著我製作唄~
Scroll Progress #

▲ 是否有注意到在網頁頂端有藍色進度條😱
-
使用 Shadcn CLI 加入 Scroll Progress
npx shadcn@latest add @animate-ui/primitives-animate-scroll-progress -
Import 元件並將元件放在想要的位置上
這邊分為 local 和 global。 Local 意思是監聽對象是元素本身(通常是某個 section 或 div),適合做「局部區塊動畫」。 Global 意思是整個頁面的全域滾動(像是瀏覽器 DOM window),適合做「全頁滾動進度動畫」,例如進度條。
import { ScrollProgressProvider, ScrollProgress, ScrollProgressContainer, type ScrollProgressDirection, } from '@/components/animate-ui/primitives/animate/scroll-progress'; // Local <ScrollProgressProvider> <ScrollProgress /> <ScrollProgressContainer>Scrollable content</ScrollProgressContainer> </ScrollProgressProvider> // Global <ScrollProgressProvider global> <ScrollProgress /> </ScrollProgressProvider>在開頭介紹的 Scroll Progress 是使用 Global 的方式進行滾動
-
若還有想要微調,可以增加更多參數 (? 表示為選填參數)
ScrollProgressProvider 可調整的部分:
參數 參數型態 說明 global? boolean是否使用全域的滾動。預設為 falsetransition? object動畫過渡設定,有三個參數( stiffness剛度 : number,damping阻尼 : number,bounce彈性 : number)。預設為{ stiffness: 250, damping: 40, bounce: 0 },若想要了解更詳細的參數,可以參考 [Day5 / Day6 Text Animation] 或是 Framer.Motion react-transitionsdirection? 'vertical' | 'horizontal'指定滾動方向, vertical表示垂直滾動,horizontal表示水平滾動,預設為verticalScrollProgress 可調整的部分:
參數 參數型態 說明 mode? 'width' | 'height' | 'scaleX' | 'scaleY'進度顯示模式: width以寬度表示、height以高度表示、scaleX透過 X 軸縮放表示、scaleY透過 Y 軸縮放表示。預設為widthasChild? boolean是否將元件作為子元素渲染,方便與其他組件結合,預設為 false
小結 #
今天主要練習如何在網頁上操作 Animate UI Scroll Progress,若覺得不過癮,需要有更多範例,可以至 Animate UI Scroll Progress 當中的設定滾動方向。
