Animations/3D Book Tilt

3D Book Tilt

Couverture de livre qui tilt en 3D au mousemove avec une ombre dynamique qui suit le curseur.

hover3DJScardproduct
Trigger: Mouse move
CSS requis: Non
Difficulte: medium

Preview live

Code

"use client";
import { useCallback, useRef } from "react";

export default function Book3DTilt({ imageSrc, title, subtitle }) {
  const cardRef = useRef<HTMLDivElement>(null);

  const handleMouseMove = useCallback((e: React.MouseEvent) => {
    const el = cardRef.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;

    const rotateX = -y * 14;
    const rotateY = x * 20;
    el.style.transform = `perspective(1000px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;

    const shadowX = -x * 40;
    const shadowY = -y * 40;
    el.style.boxShadow = `${shadowX}px ${shadowY}px 60px rgba(0,0,0,0.8)`;
  }, []);

  return (
    <div ref={cardRef} onMouseMove={handleMouseMove}
      style={{ transformStyle: "preserve-3d", transition: "transform 0.1s, box-shadow 0.3s" }}>
      <img src={imageSrc} />
      <div>{title}</div>
      <p>{subtitle}</p>
    </div>
  );
}

Instructions

Le livre tilt en 3D au mousemove avec une ombre dynamique qui suit le curseur. Ajustez les amplitudes (14, 20) et l'intensite de l'ombre (40, 60px). Ajoutez onMouseLeave pour reset la position.