WebberUI

圖形解鎖

九宮格連線解鎖:拖曳畫圖形、成功/失敗回饋動畫。

經典 Android 風格的九宮格圖形鎖:以 pointer 拖曳依序連接圓點,SVG 線段即時跟隨指標,經過的點會漲大充色;跨點連線會自動補上中間穿過的點。放開後立即驗證——正確時綠色脈衝依連線順序擴散,錯誤時整體紅色搖晃並自動清除。

載入預覽⋯

Playground

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

280
900
<PatternLock />

安裝

npx shadcn@latest add https://webberui.com/r/pattern-lock.json

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

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

npm install motion clsx tailwind-merge

使用

import { PatternLock } from "@/components/ui/pattern-lock";

<PatternLock
  pattern={[0, 3, 6, 7, 8]}
  onSuccess={() => console.log("解鎖成功")}
  onFail={(drawn) => console.log("畫錯了", drawn)}
/>

點的索引由左至右、由上至下編號:0 為左上、2 為右上、4 為中心、8 為右下。

Props

Prop型別預設值說明
patternnumber[]正確解鎖圖形:0–8 的點索引序列
onSuccess(drawn: number[]) => void驗證成功時呼叫,參數為使用者實際畫出的序列
onFail(drawn: number[]) => void驗證失敗時呼叫,參數為使用者實際畫出的序列
sizenumber280元件渲染邊長(px)
resetDelaynumber900成功/失敗回饋顯示多久後自動清除(毫秒)
hintbooleanfalse是否以淡色虛線顯示正確圖形提示
classNamestring透傳到外層容器

可及性

  • 使用者系統開啟「減少動態效果」時,關閉搖晃與脈衝動畫,僅以顏色(綠/紅)呈現驗證結果
  • 驗證結果透過 aria-live="polite" 區域向螢幕閱讀器播報「解鎖成功」或「圖形錯誤」
  • SVG 帶有描述性 aria-label,說明這是可拖曳連線的九宮格圖形鎖
  • 觸控裝置上以 touch-action: none 防止拖曳時頁面跟著捲動,並支援 pointercancel 中斷還原
  • 圖形鎖僅適合作為低強度的便利驗證,重要操作仍應搭配其他驗證方式

On this page