(() => { if (document.querySelector('html').classList.contains('is-builder')) return; function applyScrollAnimation() { const galleryWrappers = document.querySelectorAll('.gallery-wrapper'); if (!galleryWrappers.length) return; galleryWrappers.forEach((galleryWrapper) => { const gridContainer1 = galleryWrapper.querySelector('.grid-container-1'); const gridContainer2 = galleryWrapper.querySelector('.grid-container-2'); const gridContainer3 = galleryWrapper.querySelector('.grid-container-3'); const initialTransform1 = gridContainer1 ? getComputedStyle(gridContainer1).transform : null; const initialTransform2 = gridContainer2 ? getComputedStyle(gridContainer2).transform : null; const initialTransform3 = gridContainer3 ? getComputedStyle(gridContainer3).transform : null; function updateScrollAnimation() { const scrollPosition = window.scrollY; const screenHeight = window.innerHeight; const galleryBlockTop = galleryWrapper.getBoundingClientRect().top + window.scrollY; const distanceFromTop = galleryBlockTop - screenHeight; if (scrollPosition >= distanceFromTop) { const matrix1 = initialTransform1 ? new DOMMatrix(initialTransform1) : null; const matrix2 = initialTransform2 ? new DOMMatrix(initialTransform2) : null; const matrix3 = initialTransform3 ? new DOMMatrix(initialTransform3) : null; if (matrix1) { const gridItems1 = gridContainer1.querySelectorAll('.grid-item'); const numItems1 = gridItems1.length; if (numItems1 >= 8 && !gridContainer1.classList.contains('moving-left')) { matrix1.m41 = -2000; } function cloneGalleryItems() { for (let i = 0; i < numItems1; i++) { const clonedItem = gridItems1[i].cloneNode(true); gridContainer1.appendChild(clonedItem); } } switch (true) { case (numItems1 < 8): cloneGalleryItems(); case (gridContainer1.classList.contains('moving-right')): translateX1 = matrix1.m41 + (scrollPosition - distanceFromTop) * 1; break; case (gridContainer1.classList.contains('moving-left')): translateX1 = matrix1.m41 - (scrollPosition - distanceFromTop) * 1; break; default: translateX1 = matrix1.m41 + (scrollPosition - distanceFromTop) * 1; break; } gridContainer1.style.transform = `translate3d(${translateX1}px, 0, 0)`; } if (matrix2) { const gridItems2 = gridContainer2.querySelectorAll('.grid-item'); const numItems2 = gridItems2.length; if (numItems2 >= 8 && gridContainer2.classList.contains('moving-left')) { matrix2.m41 = -2000; } function cloneGalleryItems() { for (let i = 0; i < numItems2; i++) { const clonedItem = gridItems2[i].cloneNode(true); gridContainer2.appendChild(clonedItem); } } switch (true) { case (numItems2 < 8): cloneGalleryItems(); case (gridContainer2.classList.contains('moving-right')): translateX2 = matrix2.m41 + (scrollPosition - distanceFromTop) * 1; break; case (gridContainer2.classList.contains('moving-left')): translateX2 = matrix2.m41 - (scrollPosition - distanceFromTop) * 1; break; default: translateX2 = matrix2.m41 - (scrollPosition - distanceFromTop) * 1; break; } gridContainer2.style.transform = `translate3d(${translateX2}px, 0, 0)`; } if (matrix3) { const gridItems3 = gridContainer3.querySelectorAll('.grid-item'); const numItems3 = gridItems3.length; if (numItems3 >= 8 && !gridContainer3.classList.contains('moving-left')) { matrix3.m41 = -2000 } let translateX3 = matrix3.m41 + (scrollPosition - distanceFromTop) * 1; function cloneGalleryItems() { for (let i = 0; i < numItems3; i++) { const clonedItem = gridItems3[i].cloneNode(true); gridContainer3.appendChild(clonedItem); } } if (numItems3 < 8) { cloneGalleryItems() translateX3 = matrix3.m41 + (scrollPosition - distanceFromTop) * 1; } if (gridContainer3.classList.contains('moving-right')) { translateX3 = matrix3.m41 + (scrollPosition - distanceFromTop) * 1; } else if (gridContainer3.classList.contains('moving-left')) { if (numItems3 < 8) { cloneGalleryItems() } translateX3 = matrix3.m41 - (scrollPosition - distanceFromTop) * 1; } gridContainer3.style.transform = `translate3d(${translateX3}px, 0, 0)`; } } } window.addEventListener('scroll', () => { requestAnimationFrame(updateScrollAnimation); }); }); } applyScrollAnimation(); })();