import { Box } from "@mui/material"; import { keyframes } from "@mui/system"; import { useState, useEffect } from "react"; import { motion, AnimatePresence } from "framer-motion"; const slideLeft = keyframes` from { transform: translateX(0); } to { transform: translateX(-100%); } `; const slideRight = keyframes` from { transform: translateX(0); } to { transform: translateX(100%); } `; // Hook pour précharger l'image et obtenir ses dimensions const useImageDimensions = (imagePath) => { const [dimensions, setDimensions] = useState({ width: 0, height: 0 }); const [isLoaded, setIsLoaded] = useState(false); useEffect(() => { const img = new Image(); img.src = imagePath; img.onload = () => { setDimensions({ width: img.width, height: img.height }); setIsLoaded(true); }; }, [imagePath]); return { dimensions, isLoaded }; }; const Row = ({ imagePath, direction = "left", speed = 1, containerHeight }) => { const { dimensions, isLoaded } = useImageDimensions(imagePath); const animation = direction === "left" ? slideLeft : slideRight; const duration = 120 / speed; if (!isLoaded) return null; // Calculer la hauteur de l'image pour qu'elle s'adapte à la hauteur du conteneur const scale = containerHeight / dimensions.height; const scaledWidth = dimensions.width * scale; return ( {/* Premier set d'images */} {[1, 2, 3].map((i) => ( panorama ))} {/* Second set d'images pour la boucle continue */} {[1, 2, 3].map((i) => ( panorama ))} ); }; export function InfiniteBackground() { const [containerHeight, setContainerHeight] = useState(0); useEffect(() => { const updateHeight = () => { const vh = window.innerHeight; setContainerHeight(vh / 3); // Divise la hauteur de la fenêtre en 3 }; updateHeight(); window.addEventListener("resize", updateHeight); return () => window.removeEventListener("resize", updateHeight); }, []); return ( ); }