index-main/assets/js/banner-sticky-desktop.js

58 lines
1.9 KiB
JavaScript
Raw Normal View History

2026-01-06 16:15:49 +01:00
let isInitialized = false;
export function bannerStickyDesktop(responsiveSmall) {
if (isInitialized) return;
2026-01-06 17:14:32 +01:00
let body = document.body;
2026-01-25 19:40:55 +01:00
let panel = body.querySelector(".panel-left");
2026-01-06 16:15:49 +01:00
2026-01-25 19:40:55 +01:00
if (!panel) return;
2026-01-06 16:15:49 +01:00
2026-01-25 19:40:55 +01:00
let footer = document.querySelector("#site-footer");
2026-01-06 16:15:49 +01:00
// Stocker la hauteur initiale du banner
2026-01-25 19:40:55 +01:00
const bannerInitialHeight = panel.offsetHeight;
2026-01-06 16:15:49 +01:00
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
2026-01-25 19:40:55 +01:00
panel.style.transform = '';
2026-01-06 16:15:49 +01:00
return;
}
// Calculer la position du bas de la fenêtre
const windowBottom = window.scrollY + window.innerHeight;
2026-01-25 19:40:55 +01:00
// 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;
2026-01-06 16:15:49 +01:00
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);
2026-01-25 19:40:55 +01:00
panel.style.transform = `translateY(-${translateValue}px)`;
2026-01-06 16:15:49 +01:00
} else {
// Réinitialiser la position si on n'a pas encore atteint le footer
2026-01-25 19:40:55 +01:00
panel.style.transform = 'translateY(0)';
2026-01-06 16:15:49 +01:00
}
}
window.addEventListener('scroll', checkScroll);
window.addEventListener('resize', () => {
if (window.innerWidth > responsiveSmall) {
2026-01-25 19:40:55 +01:00
panel.style.transform = '';
2026-01-06 16:15:49 +01:00
}
checkScroll();
});
checkScroll();
isInitialized = true;
}