FaceSWAP / frontend /src /components /ui /TiltedCard.jsx
aditya-rAj19's picture
Initial commit: DeepFace Studio - AI face swap web application
e7a5a81
Raw
History Blame Contribute Delete
991 Bytes
import { useRef, useState } from 'react';
import { motion } from 'framer-motion';
/* Card that tilts based on mouse position */
export default function TiltedCard({ children, className = '', maxTilt = 8 }) {
const ref = useRef(null);
const [tilt, setTilt] = useState({ x: 0, y: 0 });
const handleMove = (e) => {
const rect = ref.current?.getBoundingClientRect();
if (!rect) return;
const px = (e.clientX - rect.left) / rect.width - 0.5;
const py = (e.clientY - rect.top) / rect.height - 0.5;
setTilt({ x: -py * maxTilt, y: px * maxTilt });
};
const reset = () => setTilt({ x: 0, y: 0 });
return (
<motion.div
ref={ref}
className={`${className}`}
onMouseMove={handleMove}
onMouseLeave={reset}
animate={{ rotateX: tilt.x, rotateY: tilt.y }}
transition={{ type: 'spring', stiffness: 180, damping: 22 }}
style={{ transformStyle: 'preserve-3d', perspective: 800 }}
>
{children}
</motion.div>
);
}