Bouton magnétique
Un bouton qui suit le curseur avec un effet ressort et reprend sa place dès que vous vous éloignez.
Réglages
Code
import { motion, useMotionValue, useSpring } from "framer-motion";
interface MagneticButtonProps {
color?: string;
radius?: number;
text?: string;
intensity?: number;
}
export default function MagneticButton({
color = "#0071e3",
radius = 24,
text = "Survolez-moi",
intensity = 0.5,
}: MagneticButtonProps) {
const x = useMotionValue(0);
const y = useMotionValue(0);
const sx = useSpring(x, { stiffness: 200, damping: 15 });
const sy = useSpring(y, { stiffness: 200, damping: 15 });
return (
<motion.button
type="button"
style={{ x: sx, y: sy, backgroundColor: color, borderRadius: radius }}
className="px-6 py-3 text-sm font-semibold text-white shadow-lg"
onMouseMove={(e) => {
const r = e.currentTarget.getBoundingClientRect();
x.set((e.clientX - r.left - r.width / 2) * intensity);
y.set((e.clientY - r.top - r.height / 2) * intensity);
}}
onMouseLeave={() => {
x.set(0);
y.set(0);
}}
>
{text}
</motion.button>
);
}
Prompt pour l’IA
Collez-le dans ChatGPT, Claude ou Cursor : le bloc sera adapté à votre projet avec ces réglages, même sans React.
Plus dans Boutons
Où l’utiliser
Réservez-le au clic qui compte vraiment : « Essai gratuit » sur la landing page d’un SaaS, « Demander un devis » sur le site d’une agence, ou le bouton de téléchargement d’une application. En suivant le pointeur, il attire l’œil sans clignoter ni crier. Si vous cherchiez un bouton magnétique en React, le voici.
Commencez avec l’intensité par défaut et ne l’augmentez que pour de grands boutons isolés. À côté d’une rangée de liens, il paraît vite agité. Les écrans tactiles n’ont pas de survol : sur mobile, il se comporte comme un bouton classique.