頁面區塊 Sections
編號引言滑軌
左側巨大的 01/02/03 編號以逐位滾輪切換,右側引言依方向滑入,支援拖曳、方向鍵與進度分數顯示。
把客戶評價做成一頁一則的輪播:左欄是超大的補零編號,切換時每一位數字各自沿垂直數字帶滾到新值——十位不變就不動,個位跟著切換方向往上或往下滾;下方是「02 / 05」分數與細進度軌,當前段的填色會滑到新位置。右欄是小型人像佔位方塊、引言、姓名與職稱,內容依方向從左或右滑入,也可以直接左右拖曳換頁。索引支援受控/非受控雙模式,可選擇循環與自動播放。
把這個效果裝進你的專案
在專案資料夾執行指令,CLI 會加入原始碼與依賴套件,再依下方使用範例引用元件。
npx webberui@latest add numbered-quote-sliderPlayground
即時調整 props、程式碼片段同步更新——直接試出你要的樣子再複製。
300
500
編輯中的呼叫預設屬性
<NumberedQuoteSlider/>
完整範例包含預覽的排版與資料。先安裝元件,再把範例檔貼入你的專案。
安裝
npx webberui@latest add https://webberui.com/r/numbered-quote-slider.json或在 components.json 設定 registries 後,改用 @webberui/numbered-quote-slider 安裝。
使用
import { NumberedQuoteSlider } from "@/components/ui/numbered-quote-slider";
<NumberedQuoteSlider
eyebrow="客戶怎麼說"
title="用過的團隊,留下的一句話"
testimonials={[
{
quote: "尖峰時段的出餐時間縮短了將近一半。",
name: "林語晴",
role: "營運主管",
company: "青嶼咖啡",
highlight: "縮短了將近一半",
},
{
quote: "調度畫面一眼看得出哪台車卡住。",
name: "陳柏宇",
role: "調度組長",
company: "北辰物流",
rating: 5,
},
]}
onIndexChange={(i) => console.log(`切到第 ${i + 1} 則`)}
/>Props
| Prop | 型別 | 預設值 | 說明 |
|---|---|---|---|
testimonials | NumberedQuoteSliderItem[] | — | 評價清單(必填) |
eyebrow | string | — | 標題上方的小標 |
title | string | — | 區塊標題;有提供時作為 section 的 aria-labelledby |
subtitle | string | — | 標題下方的說明文字 |
index | number | — | 受控的目前索引(從 0 起算);未提供時由元件內部管理 |
defaultIndex | number | 0 | 非受控模式的初始索引 |
onIndexChange | (index: number) => void | — | 索引變動時回呼 |
loop | boolean | true | 到最後一則後是否繞回第一則(反之亦然);關閉時兩端的箭頭會停用 |
autoplay | boolean | false | 是否自動播放;開啟時顯示暫停鈕 |
interval | number | 6000 | 自動播放間隔(ms) |
pad | number | 2 | 編號補零的最少位數 |
stiffness | number | 300 | 編號滾輪的 spring 剛性;寫入 --wb-numbered-quote-slider-stiffness |
duration | number | 500 | 右欄內容滑入的時長(ms);寫入 --wb-numbered-quote-slider-duration |
outlined | boolean | false | 大編號加上強調色描邊 |
className | string | — | 透傳到根 section |
NumberedQuoteSliderItem
| 欄位 | 型別 | 預設值 | 說明 |
|---|---|---|---|
quote | string | — | 引言內文 |
name | string | — | 姓名 |
role | string | — | 職稱 |
company | string | — | 公司 |
rating | number | — | 評分(0–5),顯示為星等 |
avatarHue | number | — | 佔位人像的色相;未提供時依索引以黃金角度(137.508°)推算 |
highlight | string | — | quote 中要以強調色標記的片段 |
metric | { value: string; label: string } | — | 搭配引言的關鍵數字 |
photoSrc | string | — | 人像照片網址;未提供時以漸層 + 抽象剪影佔位 |
細節
- 逐位滾輪:每一位數字是一條 0–9 重複三次的垂直數字帶,平時停在中段。下一則一律往上滾、上一則一律往下滾,所以 09 → 10 的個位會往前滾一格到 0,而不是倒退九格;滾完再悄悄歸位到中段。
- 節奏變數:
--wb-numbered-quote-slider-stiffness(預設300,damping 固定 30)與--wb-numbered-quote-slider-duration(預設500ms)。可以在外層 CSS 直接覆寫,也可以用同名 prop 設定。 - 強調色只走
--wb-numbered-quote-slider-accent(淺色預設#0d9488、深色預設#2dd4bf),用於進度軌、星等、highlight 與焦點框。 - 拖曳右欄:放手時位移超過 80px 或速度超過 400px/s 就換頁,否則彈回原位;箭頭鈕在拖曳區外,不會誤觸。
- 自動播放在滑鼠停留、焦點在元件內、分頁隱藏或按下暫停鈕時暫停;
loop關閉時播到最後一則就停。
可及性
- 根元素是
<section>,有title時以aria-labelledby指向標題;輪播區為role="region"、aria-roledescription="輪播",可取得焦點 - 焦點在輪播區時,←/→ 方向鍵切換上一則/下一則;箭頭鈕為
type="button"並帶「上一則」「下一則」aria-label,有 focus-visible 外框 - 大編號、分數與進度軌對輔助科技隱藏,改由 sr-only 的「第 2 則,共 5 則」以
aria-live="polite"朗讀;自動播放進行中暫不朗讀,避免反覆打斷 - 每則引言以
<figure>、<blockquote>、<figcaption>呈現;星等為role="img"並帶「評分 5 / 5」的標籤 - 自動播放預設關閉;開啟時一定有可見的暫停鈕(WCAG 2.2.2)
- 使用者系統開啟「減少動態效果」時:自動播放一律關閉、編號不滾動改為 150ms 淡入、引言不位移改為 150ms 淡入,進度軌直接跳到新位置;內容仍可用按鈕、方向鍵與拖曳切換