WebberUI

壓力感應文字

字元依游標壓力區即時縮放變形(可變字體),越靠近游標越被壓寬、壓重、壓斜。

字元依游標壓力區即時縮放變形。游標越靠近,字元被壓得越寬、越重、越斜,形成流動的可變字體質感。

載入預覽⋯

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.jsonfiles[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 映射成字重、scaleXscaleY 與 skew。
  • 字重(weight)在支援可變字重的系統字體(如 SF Pro、Segoe UI Variable)上會平滑內插;widthheight 用 transform 縮放,任何字體都順暢。
  • 游標離開後所有字元回到中性狀態。系統開啟「減少動態效果」時渲染靜態文字。
  • radius 控制壓力波及半徑,值須為正數;smoothing 越小游標越黏滯。

Props

Prop型別預設值說明
textstring要顯示的文字
weightbooleantrue字重依游標距離變化
widthbooleantrue字寬(水平縮放)依游標距離變化
heightbooleantrue字高(垂直縮放)依游標距離變化
alphabooleanfalse不透明度依游標距離變化
italicbooleanfalse斜體(skew)依游標距離變化
radiusnumber180壓力影響半徑(px)
fontSizenumber64字級(px)
weightRange[number, number][200, 900]字重範圍 [最遠, 最近]
smoothingnumber0.18游標平滑係數(0~1,越小越黏滯)
classNamestring透傳到容器,設定字色與字體

可及性

  • 使用者系統開啟「減少動態效果」時,直接渲染靜態文字,不啟動動畫迴圈
  • 完整文字以 sr-only 提供給輔助科技,逐字元的視覺層以 aria-hidden 隱藏

On this page