let isInitialized = false; export function bannerStickyDesktop(responsiveSmall) { if (isInitialized) return; let body = document.body; let panel = body.querySelector(".panel-left"); if (!panel) return; let footer = document.querySelector("#site-footer"); // Stocker la hauteur initiale du banner const bannerInitialHeight = panel.offsetHeight; 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 panel.style.transform = ''; return; } // Calculer la position du bas de la fenêtre const windowBottom = window.scrollY + window.innerHeight; // Calculer dynamiquement la position du footer à chaque scroll // Utiliser getBoundingClientRect() + scrollY pour une valeur toujours à jour const footerTop = footer.getBoundingClientRect().top + window.scrollY; // Calculer de combien on dépasse le haut du footer const overlap = windowBottom - footerTop; 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); panel.style.transform = `translateY(-${translateValue}px)`; } else { // Réinitialiser la position si on n'a pas encore atteint le footer panel.style.transform = 'translateY(0)'; } } window.addEventListener('scroll', checkScroll); window.addEventListener('resize', () => { if (window.innerWidth > responsiveSmall) { panel.style.transform = ''; } checkScroll(); }); checkScroll(); isInitialized = true; }