React + MotionBotones
Botón magnético
Un botón que va detrás del cursor con efecto muelle y vuelve a su sitio en cuanto te alejas.
Ajustes
24px
0.5
Código
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 = "Pasa el cursor",
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 para IA
Pégalo en ChatGPT, Claude o Cursor y adaptará el bloque a tu proyecto con estos ajustes, aunque no uses React.
Más en Botones
Dónde usarlo
Úsalo en el clic que más te importa: el «Prueba gratis» de la landing de un SaaS, el «Pide presupuesto» de un estudio o el botón de descarga de una app. Como sigue al puntero, atrae la mirada sin parpadeos ni colores chillones. Si buscabas un efecto de botón magnético en React, es este.
Empieza con la intensidad que trae y súbela solo en botones grandes y aislados. Pegado a una fila de enlaces se nota inquieto. En pantallas táctiles no hay hover, así que en el móvil funciona como un botón normal.