diff --git a/app/Gallery/page.tsx b/app/Gallery/page.tsx index dea0aba..00a44d4 100644 --- a/app/Gallery/page.tsx +++ b/app/Gallery/page.tsx @@ -20,18 +20,36 @@ const images = [ "/Assets/Images/cj8.jpg", ]; -const IMAGE_WIDTH = 600 + 48; // width + 2*mx-6 (24px each side) +// Responsive image width and margin +const getImageWidth = () => { + if (typeof window === "undefined") return 600 + 48; + if (window.innerWidth < 640) return 320 + 24; // mobile: 320px + 2*mx-3 + if (window.innerWidth < 1024) return 480 + 32; // tablet: 480px + 2*mx-4 + return 600 + 48; // desktop: 600px + 2*mx-6 +}; const Gallery = () => { const controls = useAnimation(); const [isPaused, setIsPaused] = useState(false); +<<<<<<< HEAD + const [offset, setOffset] = useState(0); + const [imageWidth, setImageWidth] = useState(getImageWidth()); + + // Update image width on resize + useEffect(() => { + const handleResize = () => setImageWidth(getImageWidth()); + window.addEventListener("resize", handleResize); + return () => window.removeEventListener("resize", handleResize); + }, []); +======= const [offset, setOffset] = useState(0); // offset in px +>>>>>>> f44a310707bb1d1606c8f6f0471ed10d89ff7476 // Start animation useEffect(() => { if (!isPaused) { controls.start({ - x: [offset, offset - (images.length * IMAGE_WIDTH)], + x: [offset, offset - (images.length * imageWidth)], transition: { repeat: Infinity, repeatType: "loop", @@ -43,41 +61,55 @@ const Gallery = () => { controls.stop(); } // eslint-disable-next-line - }, [isPaused, offset, controls]); + }, [isPaused, offset, controls, imageWidth]); - // When hover, set offset so hovered image is first + // When hover/tap, set offset so hovered image is first const handleMouseEnter = (idx: number) => { setIsPaused(true); +<<<<<<< HEAD + setOffset(-idx * imageWidth); + controls.set({ x: -idx * imageWidth }); +======= setOffset(-idx * IMAGE_WIDTH); controls.set({ x: -idx * IMAGE_WIDTH }); +>>>>>>> f44a310707bb1d1606c8f6f0471ed10d89ff7476 }; // On leave, resume animation from current offset const handleMouseLeave = () => { setIsPaused(false); +<<<<<<< HEAD + }; + + // For mobile: handle tap to pause and focus image + const handleTouch = (idx: number) => { + handleMouseEnter(idx); + setTimeout(() => setIsPaused(false), 2000); // Resume after 2s +======= +>>>>>>> f44a310707bb1d1606c8f6f0471ed10d89ff7476 }; return (
+
Explore our collection of memorable moments and achievements
+
Capturing our journey of innovation and collaboration