壓力感應文字
字元依游標壓力區即時縮放變形(可變字體),越靠近游標越被壓寬、壓重、壓斜。
字元依游標壓力區即時縮放變形。游標越靠近,字元被壓得越寬、越重、越斜,形成流動的可變字體質感。
載入預覽⋯
Playground
即時調整 props、程式碼片段同步更新——直接試出你要的樣子再複製。
64
180
0.18
<TextPressure />
安裝
npx shadcn@latest add https://webberui.com/r/text-pressure.json或在 components.json 設定 registries 後,改用 @webberui/text-pressure 安裝。
安裝依賴後,從 registry JSON(/r/text-pressure.json 的 files[0].content)複製 text-pressure.tsx 原始碼到你的 components/ui/ 目錄:
npm install motion clsx tailwind-merge使用
import { TextPressure } from "@/components/ui/text-pressure";
<TextPressure text="PRESSURE" fontSize={92} />說明
- 效果由
requestAnimationFrame迴圈驅動:每幀計算各字元中心到游標的距離,透過 smoothstep falloff 映射成字重、scaleX、scaleY與 skew。 - 字重(
weight)在支援可變字重的系統字體(如 SF Pro、Segoe UI Variable)上會平滑內插;width與height用 transform 縮放,任何字體都順暢。 - 游標離開後所有字元回到中性狀態。系統開啟「減少動態效果」時渲染靜態文字。
radius控制壓力波及半徑,值須為正數;smoothing越小游標越黏滯。
Props
| Prop | 型別 | 預設值 | 說明 |
|---|---|---|---|
text | string | — | 要顯示的文字 |
weight | boolean | true | 字重依游標距離變化 |
width | boolean | true | 字寬(水平縮放)依游標距離變化 |
height | boolean | true | 字高(垂直縮放)依游標距離變化 |
alpha | boolean | false | 不透明度依游標距離變化 |
italic | boolean | false | 斜體(skew)依游標距離變化 |
radius | number | 180 | 壓力影響半徑(px) |
fontSize | number | 64 | 字級(px) |
weightRange | [number, number] | [200, 900] | 字重範圍 [最遠, 最近] |
smoothing | number | 0.18 | 游標平滑係數(0~1,越小越黏滯) |
className | string | — | 透傳到容器,設定字色與字體 |
可及性
- 使用者系統開啟「減少動態效果」時,直接渲染靜態文字,不啟動動畫迴圈
- 完整文字以
sr-only提供給輔助科技,逐字元的視覺層以aria-hidden隱藏