let isInitialized = false; export function bannerStickyDesktop(responsiveSmall) { if (isInitialized) return; let body = document.body; if (!body || body.dataset.template !== 'investigation-summary') return; let bannerPage = body.querySelector("#banner--page"); let sectionDl = document.querySelector("#section__dl"); let footer = document.querySelector("#site-footer"); if (!bannerPage || !sectionDl || !footer) return; // Stocker la hauteur initiale du banner const bannerInitialHeight = bannerPage.offsetHeight; // Stocker la position initiale du footer (calculée une seule fois au chargement) let footerInitialTop = footer.offsetTop; function checkScroll() { const screenWidth = window.innerWidth; // Vérifier que l'écran est plus grand que responsiveSmall if (screenWidth <= responsiveSmall) { // Réinitialiser le transform si on est en dessous de responsiveSmall bannerPage.style.transform = ''; return; } // Calculer la position du bas de la fenêtre const windowBottom = window.scrollY + window.innerHeight; // Calculer de combien on dépasse le haut du footer (position initiale) const overlap = windowBottom - footerInitialTop; if (overlap > 0) { // Le bas de la fenêtre a atteint le haut du footer // Déplacer le banner vers le haut du nombre de pixels de dépassement const translateValue = Math.min(overlap, bannerInitialHeight); bannerPage.style.transform = `translateY(-${translateValue}px)`; } else { // Réinitialiser la position si on n'a pas encore atteint le footer bannerPage.style.transform = 'translateY(0)'; } } window.addEventListener('scroll', checkScroll); window.addEventListener('resize', () => { // Recalculer la position du footer lors du resize if (window.innerWidth > responsiveSmall) { bannerPage.style.transform = ''; footerInitialTop = footer.offsetTop; } checkScroll(); }); checkScroll(); isInitialized = true; }