Card qui oscille subtilement au mousemove avec translation, scale et texture noise.
"use client";
import { useCallback, useRef } from "react";
export default function WobbleCard({ children }) {
const ref = useRef<HTMLDivElement>(null);
const handleMouseMove = useCallback((e: React.MouseEvent) => {
const el = ref.current;
if (!el) return;
const rect = el.getBoundingClientRect();
const x = (e.clientX - rect.left) / rect.width - 0.5;
const y = (e.clientY - rect.top) / rect.height - 0.5;
el.style.transform = `translate(${x * 5}px, ${y * 5}px) scale(1.02)`;
}, []);
const handleMouseLeave = useCallback(() => {
if (ref.current) ref.current.style.transform = "translate(0, 0) scale(1)";
}, []);
return (
<div ref={ref} onMouseMove={handleMouseMove} onMouseLeave={handleMouseLeave}
style={{ transition: "transform 0.2s ease-out" }}>
{children}
</div>
);
}Card qui oscille subtilement au mousemove avec translation + scale. Amplitude faible (5px, 1.02) pour un effet subtil. La transition (0.2s) lisse le mouvement. Wrapper generique.