Animations/Wobble Card

Wobble Card

Card qui oscille subtilement au mousemove avec translation, scale et texture noise.

hoverJScardinteractive3D
Trigger: Mouse move
CSS requis: Non
Difficulte: easy

Preview live

Code

"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>
  );
}

Instructions

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.