頁面區塊 Sections

編號引言滑軌

左側巨大的 01/02/03 編號以逐位滾輪切換,右側引言依方向滑入,支援拖曳、方向鍵與進度分數顯示。

把客戶評價做成一頁一則的輪播:左欄是超大的補零編號,切換時每一位數字各自沿垂直數字帶滾到新值——十位不變就不動,個位跟著切換方向往上或往下滾;下方是「02 / 05」分數與細進度軌,當前段的填色會滑到新位置。右欄是小型人像佔位方塊、引言、姓名與職稱,內容依方向從左或右滑入,也可以直接左右拖曳換頁。索引支援受控/非受控雙模式,可選擇循環與自動播放。

把這個效果裝進你的專案

在專案資料夾執行指令,CLI 會加入原始碼與依賴套件,再依下方使用範例引用元件。

npx webberui@latest add numbered-quote-slider

還沒有專案,或安裝遇到問題?看快速開始 →

Playground

即時調整 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型別預設值說明
testimonialsNumberedQuoteSliderItem[]—評價清單(必填)
eyebrowstring—標題上方的小標
titlestring—區塊標題;有提供時作為 section 的 aria-labelledby
subtitlestring—標題下方的說明文字
indexnumber—受控的目前索引(從 0 起算);未提供時由元件內部管理
defaultIndexnumber0非受控模式的初始索引
onIndexChange(index: number) => void—索引變動時回呼
loopbooleantrue到最後一則後是否繞回第一則(反之亦然);關閉時兩端的箭頭會停用
autoplaybooleanfalse是否自動播放;開啟時顯示暫停鈕
intervalnumber6000自動播放間隔(ms)
padnumber2編號補零的最少位數
stiffnessnumber300編號滾輪的 spring 剛性;寫入 --wb-numbered-quote-slider-stiffness
durationnumber500右欄內容滑入的時長(ms);寫入 --wb-numbered-quote-slider-duration
outlinedbooleanfalse大編號加上強調色描邊
classNamestring—透傳到根 section

NumberedQuoteSliderItem

欄位型別預設值說明
quotestring—引言內文
namestring—姓名
rolestring—職稱
companystring—公司
ratingnumber—評分(0–5),顯示為星等
avatarHuenumber—佔位人像的色相;未提供時依索引以黃金角度(137.508°)推算
highlightstring—quote 中要以強調色標記的片段
metric{ value: string; label: string }—搭配引言的關鍵數字
photoSrcstring—人像照片網址;未提供時以漸層 + 抽象剪影佔位

細節

  • 逐位滾輪:每一位數字是一條 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 淡入,進度軌直接跳到新位置;內容仍可用按鈕、方向鍵與拖曳切換