頁面區塊 Sections

評價跑馬燈

單行無限捲動的短評跑馬燈 React 元件:評語以星號分隔、兩端淡出,可加第二行反向捲動,hover 或聚焦時暫停,附可見的暫停鈕。

放在 hero 下方的社會證明帶。每則評價只有一個小頭像、一句短評與「— 姓名,公司」,則與則之間以強調色星號分隔,左右兩端漸隱。內容複製一份後以 CSS 動畫線性無限捲動,速度以 px/s 指定、量測內容寬度後換算成週期;rows={2} 時第二行反向捲動、內容錯開一半。滑鼠移入、鍵盤聚焦、分頁隱藏或捲出畫面時自動暫停,右側另有一顆可見的暫停鈕。

把這個效果裝進你的專案

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

npx webberui@latest add review-ticker

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

Playground

即時調整 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型別預設值說明
testimonialsReviewTickerItem[]—評價資料陣列
eyebrowstring—標題上方的小標籤;有提供才顯示
titlestring—區塊主標題;預設不顯示,有提供時置於跑馬燈上方
subtitlestring—主標題下方的說明文字
rows1 | 21跑馬燈行數;2 行時第二行反向捲動、內容錯開一半
speednumber50捲動速度(px/s),量測內容寬度後換算成週期
direction"left" | "right""left"第一行的捲動方向
borderedbooleantrue是否顯示上下細邊線
durationnumber—固定週期(秒);有提供時覆寫 speed 的換算結果
maxQuoteLengthnumber40quote 超過此字數時截斷並加上 …(有 short 時不截斷)
pausedboolean—受控模式:是否由使用者暫停
defaultPausedbooleanfalse非受控模式:初始是否暫停
onPausedChange(paused: boolean) => void—使用者按下暫停鈕時回呼
regionLabelstring"客戶評價"未提供 title 時整個區塊的無障礙標籤
pauseLabelstring"暫停捲動"暫停鈕的無障礙標籤
classNamestring—併入根 section

ReviewTickerItem

欄位型別預設值說明
quotestring—引言內文;被截斷時 hover 會浮出完整內容
namestring—評價者姓名
companystring—公司名稱,顯示於姓名後
rolestring—職稱;未提供 company 時改顯示職稱
shortstring—跑馬燈上顯示的短版評語;未提供時自動截斷 quote
avatarHuenumber—頭像漸層色相(0–360);未提供時依索引以黃金角度推算
avatarSrcstring—頭像圖片網址;未提供時顯示姓名縮寫漸層圓
highlightstring—顯示文字中要以強調色標記的片段
ratingnumber—本元件不顯示,保留與其他 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,暫停鈕隱藏