頁面區塊 Sections
評價跑馬燈
單行無限捲動的短評跑馬燈 React 元件:評語以星號分隔、兩端淡出,可加第二行反向捲動,hover 或聚焦時暫停,附可見的暫停鈕。
放在 hero 下方的社會證明帶。每則評價只有一個小頭像、一句短評與「— 姓名,公司」,則與則之間以強調色星號分隔,左右兩端漸隱。內容複製一份後以 CSS 動畫線性無限捲動,速度以 px/s 指定、量測內容寬度後換算成週期;rows={2} 時第二行反向捲動、內容錯開一半。滑鼠移入、鍵盤聚焦、分頁隱藏或捲出畫面時自動暫停,右側另有一顆可見的暫停鈕。
把這個效果裝進你的專案
在專案資料夾執行指令,CLI 會加入原始碼與依賴套件,再依下方使用範例引用元件。
npx webberui@latest add review-tickerPlayground
即時調整 props、程式碼片段同步更新——直接試出你要的樣子再複製。
50
0
編輯中的呼叫預設屬性
<ReviewTicker/>
完整範例包含預覽的排版與資料。先安裝元件,再把範例檔貼入你的專案。
安裝
npx webberui@latest add https://webberui.com/r/review-ticker.json或在 components.json 設定 registries 後,改用 @webberui/review-ticker 安裝。
使用
import { ReviewTicker } from "@/components/ui/review-ticker";
<ReviewTicker
rows={2}
speed={50}
testimonials={[
{ quote: "門市排班從半天縮到十分鐘,店長終於能準時下班。", name: "林予安", company: "青嶼咖啡" },
{ quote: "出貨異常的通知時間縮短了一半,客服再也不用一通通電話追司機。", name: "陳柏宏", company: "北辰物流", short: "出貨異常通知時間縮短一半" },
{ quote: "結帳流程更短,這一季回購率是開站以來最高。", name: "黃冠廷", company: "好日選物" },
]}
/>Props
| Prop | 型別 | 預設值 | 說明 |
|---|---|---|---|
testimonials | ReviewTickerItem[] | — | 評價資料陣列 |
eyebrow | string | — | 標題上方的小標籤;有提供才顯示 |
title | string | — | 區塊主標題;預設不顯示,有提供時置於跑馬燈上方 |
subtitle | string | — | 主標題下方的說明文字 |
rows | 1 | 2 | 1 | 跑馬燈行數;2 行時第二行反向捲動、內容錯開一半 |
speed | number | 50 | 捲動速度(px/s),量測內容寬度後換算成週期 |
direction | "left" | "right" | "left" | 第一行的捲動方向 |
bordered | boolean | true | 是否顯示上下細邊線 |
duration | number | — | 固定週期(秒);有提供時覆寫 speed 的換算結果 |
maxQuoteLength | number | 40 | quote 超過此字數時截斷並加上 …(有 short 時不截斷) |
paused | boolean | — | 受控模式:是否由使用者暫停 |
defaultPaused | boolean | false | 非受控模式:初始是否暫停 |
onPausedChange | (paused: boolean) => void | — | 使用者按下暫停鈕時回呼 |
regionLabel | string | "客戶評價" | 未提供 title 時整個區塊的無障礙標籤 |
pauseLabel | string | "暫停捲動" | 暫停鈕的無障礙標籤 |
className | string | — | 併入根 section |
ReviewTickerItem
| 欄位 | 型別 | 預設值 | 說明 |
|---|---|---|---|
quote | string | — | 引言內文;被截斷時 hover 會浮出完整內容 |
name | string | — | 評價者姓名 |
company | string | — | 公司名稱,顯示於姓名後 |
role | string | — | 職稱;未提供 company 時改顯示職稱 |
short | string | — | 跑馬燈上顯示的短版評語;未提供時自動截斷 quote |
avatarHue | number | — | 頭像漸層色相(0–360);未提供時依索引以黃金角度推算 |
avatarSrc | string | — | 頭像圖片網址;未提供時顯示姓名縮寫漸層圓 |
highlight | string | — | 顯示文字中要以強調色標記的片段 |
rating | number | — | 本元件不顯示,保留與其他 testimonial 元件共用資料 |
metric | { value: string; label: string } | — | 本元件不顯示,保留與其他 testimonial 元件共用資料 |
細節
- 節奏變數:週期讀
--wb-review-ticker-duration(預設由speed換算,量測前為 45s),進場淡入讀--wb-review-ticker-enter-duration(600ms),強調色讀--wb-review-ticker-accent(預設#0d9488,深色#2dd4bf)。在全域設定--wb-review-ticker-duration會覆寫speed。 - 無縫循環:內容複製一份後
translateX從 0 走到 -50%;評價很少、一份內容比可視區窄時,會自動重複到填滿再複製,避免露出空白。 - 截斷:中英文都依「字元」計數截斷,不會切出半個字;截斷的評語 hover 時在帶子上方浮出完整引言,螢幕閱讀器則直接讀完整內容。
- 頭像不需要照片:姓名縮寫(中文取末兩字、拉丁取首字母)配上依索引黃金角度色相的雙色漸層,確定性產生;需要真圖時傳
avatarSrc。 - 背景是一條極淡的波浪線 SVG,由幾組正弦疊加產生,伺服器與瀏覽器輸出一致。
可及性
- 根元素是
section,有title時以aria-labelledby指向標題,否則使用aria-label="客戶評價" - 為了無縫循環而複製的內容、第二行(同一批評價的重複)都設為
aria-hidden,螢幕閱讀器每則只讀一次 - 每則評價以
figure/blockquote/figcaption呈現;截斷時視覺文字對輔助科技隱藏,改讀完整引言 - 帶子右側有可見的暫停鈕(
aria-pressed表示狀態),符合 WCAG 2.2.2;滑鼠移入、鍵盤聚焦、分頁隱藏或捲出畫面時也會暫停 - 使用者系統開啟「減少動態效果」時不捲動,改為單行、可用鍵盤聚焦後水平捲動的靜態列,進場淡入縮短為 150ms,暫停鈕隱藏