WebberUI

Magnetic Button

磁吸按鈕:游標靠近時被吸向游標偏移,內層文字視差、離開後 spring 回彈。

載入預覽⋯

Playground

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

0.35
<MagneticButton />

安裝

npx shadcn@latest add https://webberui.com/r/magnetic-button.json

安裝時會一併寫入 --wb-duration-fast CSS 變數到你的全域樣式。

安裝依賴後,複製 magnetic-button.tsx 到你的 components/ui/ 目錄,並在全域 CSS 加入:

npm install motion clsx tailwind-merge
:root {
  --wb-duration-fast: 200ms;
}

使用

import { MagneticButton } from "@/components/ui/magnetic-button";

<MagneticButton onClick={() => console.log("clicked")}>
  開始使用
</MagneticButton>

Props

Prop型別預設值說明
strengthnumber0.35磁吸強度:按鈕偏移量 = 游標相對中心距離 × strength,0 表示完全不動
springConfigSpringOptions{ stiffness: 260, damping: 18, mass: 0.7 }離開後回彈的 spring 參數
classNamestring覆蓋預設樣式(預設為實心按鈕,可改為外框等變體)
childrenReactNode按鈕內容

其餘 <button> 屬性(onClickdisabledaria-* 等)皆直接透傳。

細節

  • 視差深度:按鈕朝游標偏移時,內層文字反向偏移一半,產生兩層深度感
  • spring 回彈:以 useMotionValue + useSpring 驅動,游標離開後帶慣性彈回原位
  • 觸控裝置自動停用:僅回應滑鼠的 pointer 事件(pointerType === "mouse"),觸控時就是一顆普通按鈕
  • 使用者系統開啟「減少動態效果」時停用磁吸,按鈕保持原位、功能不受影響
  • disabled 時同步停用磁吸

On this page