Images eparpillees autour d'un titre. Tout tilt en 3D au passage du curseur sur la section.
"use client";
import { useCallback, useRef, useState } from "react";
export default function HeroTilt() {
const ref = useRef<HTMLDivElement>(null);
const [transform, setTransform] = useState(
"perspective(800px) rotateX(0deg) rotateY(0deg)"
);
const handleMouseMove = useCallback((e: React.MouseEvent) => {
const el = ref.current;
if (!el) return;
const rect = el.getBoundingClientRect();
const rotateY = ((e.clientX - rect.left - rect.width / 2) / (rect.width / 2)) * 12;
const rotateX = ((rect.height / 2 - (e.clientY - rect.top)) / (rect.height / 2)) * 12;
setTransform(`perspective(800px) rotateX(${rotateX.toFixed(2)}deg) rotateY(${rotateY.toFixed(2)}deg)`);
}, []);
const handleMouseLeave = useCallback(() => {
setTransform("perspective(800px) rotateX(0deg) rotateY(0deg)");
}, []);
return (
<section ref={ref} onMouseMove={handleMouseMove} onMouseLeave={handleMouseLeave}
className="w-full min-h-screen flex items-center justify-center">
<div style={{ transformStyle: "preserve-3d", transform, transition: "transform 0.1s ease-out" }}>
{/* Vos elements ici — chaque enfant avec translateZ() pour la profondeur */}
</div>
</section>
);
}Composant React client. Placez vos elements enfants avec des translateZ() differents pour creer de la profondeur. Ajustez l'amplitude (12) pour plus ou moins d'inclinaison.