61 lines
No EOL
2.1 KiB
JavaScript
61 lines
No EOL
2.1 KiB
JavaScript
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;
|
|
} |