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) => (
))}
{/* Second set d'images pour la boucle continue */}
{[1, 2, 3].map((i) => (
))}
);
};
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 (
);
}