WebberUI

中文數字滾動

數字以中文小寫/大寫/阿拉伯三種形式滾動切換,金額大寫自動轉換。

數字在阿拉伯、中文小寫、金額大寫三種格式間滾動切換:內建轉換器把 123456 轉為「十二萬三千四百五十六」或「壹拾貳萬參仟肆佰伍拾陸元整」,數值變動時逐位上下捲動(里程表式,未變動的單位字保持不動),切換格式時整組交叉淡變。

載入預覽⋯

Playground

即時調整 props、程式碼片段同步更新——直接試出你要的樣子再複製。

10500
<CjkNumberRoller />

安裝

npx shadcn@latest add https://webberui.com/r/cjk-number-roller.json

或在 components.json 設定 registries 後,改用 @webberui/cjk-number-roller 安裝。

安裝依賴後,從 registry JSON(/r/cjk-number-roller.jsonfiles[0].content)複製 cjk-number-roller.tsx 原始碼到你的 components/ui/ 目錄:

npm install motion clsx tailwind-merge

使用

import {
  CjkNumberRoller,
  numberToChinese,
} from "@/components/ui/cjk-number-roller";

<CjkNumberRoller value={123456} format="arabic" prefix="NT$" />
<CjkNumberRoller value={123456} format="lower" />
<CjkNumberRoller value={123456} format="upper" className="text-4xl font-semibold" />

// 轉換器也可單獨呼叫
numberToChinese(123456, "lower"); // 十二萬三千四百五十六
numberToChinese(123456, "upper"); // 壹拾貳萬參仟肆佰伍拾陸

Props

Prop型別預設值說明
valuenumber要顯示的數值,會被取整並鉗制為 0 ~ Number.MAX_SAFE_INTEGER
formatCjkNumberFormat"arabic"顯示格式:arabic(千分位阿拉伯數字)、lower(中文小寫)、upper(金額大寫)
prefixstring數字前綴(如 NT$),以較小字級顯示在左側
animatebooleantrue是否啟用滾動動畫
currencySuffixbooleantrueupper 格式是否自動附加「元整」
classNamestring透傳到外層容器

另外具名匯出純函式 numberToChinese(value, style)style"lower""upper"):組間空位依慣例補「零」(10500 → 一萬零五百)、小寫開頭「一十」省略為「十」;單位表內建至「兆」,已涵蓋 JS 安全整數範圍。

可及性

  • 完整格式化結果以 sr-only 供螢幕閱讀器朗讀,逐位動畫字元對輔助科技隱藏(aria-hidden
  • 使用者系統開啟「減少動態效果」或 animate 設為 false 時,直接渲染靜態文字,不掛載任何動畫
  • 動畫僅在客戶端掛載後啟動,SSR 首次輸出與客戶端一致,不會產生 hydration 差異

On this page