WebberUI

解密文字

亂碼字元快速跳動後逐一鎖定為真實文字,駭客風解密效果。

進入視窗時每個字元先快速跳動亂碼,再由左至右逐一鎖定為真實文字,鎖定前緣帶有閃爍游標,重現經典駭客電影的解密畫面;支援進入視窗、掛載、懸停三種觸發時機,可自訂字元集與隨時重播。

載入預覽⋯

Playground

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

50
35
<DecryptText />

安裝

npx shadcn@latest add https://webberui.com/r/decrypt-text.json

或在 components.json 設定 registries 後,改用 @webberui/decrypt-text 安裝。

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

npm install motion clsx tailwind-merge

使用

import { DecryptText } from "@/components/ui/decrypt-text";

<DecryptText text="ACCESS GRANTED — 驗證通過" />

// 懸停觸發 + 自訂亂碼字元集(CJK 文字用全形字元可避免寬度抖動)
<DecryptText
  text="機密檔案已解鎖"
  trigger="hover"
  characters="機密檔案已解鎖加密金鑰核心資料"
/>

Props

Prop型別預設值說明
textstring要解密顯示的完整文字
trigger"inView" | "load" | "hover""inView"觸發時機:進入視窗、掛載後立即、懸停/聚焦
lockSpeednumber50每個字元鎖定的間隔(毫秒),越小解密越快
scrambleSpeednumber35亂碼跳動的更新間隔(毫秒)
charactersstring英數+符號亂碼字元集
oncebooleantruetrigger="inView" 時是否只播放一次
playKeynumber | string變更此值即重新播放動畫
onComplete() => void全部字元鎖定完成後的回呼
scrambleClassNamestring未鎖定亂碼段的自訂樣式,覆蓋預設綠色
classNamestring透傳到外層容器,與預設 font-mono 合併

可及性

  • 使用者系統開啟「減少動態效果」時,直接顯示完整文字,完全不播放亂碼動畫
  • 完整文字以 sr-only 提供給螢幕閱讀器,跳動中的亂碼與游標對輔助科技隱藏(aria-hidden),不會被逐字播報
  • trigger="hover" 時元素可鍵盤聚焦(tabIndex=0),focus 與滑鼠懸停同樣能觸發解密
  • 亂碼以 index-seeded 偽亂數產生,SSR 與水合輸出一致,不會造成內容跳動或警告

On this page