/* ========================================================= O2 OPTIQUE — COMPORTEMENT DU MENU AU DÉFILEMENT ========================================================= */ (function () { "use strict"; function initO2Header() { var header = document.getElementById("masthead"); if (!header) { return; } var previousScroll = window.scrollY || 0; var topThreshold = 5; var showThreshold = 80; var directionThreshold = 6; var ticking = false; function updateHeader() { var currentScroll = Math.max( 0, window.scrollY || window.pageYOffset || 0 ); var difference = currentScroll - previousScroll; document.body.classList.remove( "o2-header-at-top", "o2-header-visible", "o2-header-hidden" ); /* Tout en haut : menu totalement transparent */ if (currentScroll <= topThreshold) { document.body.classList.add("o2-header-at-top"); } /* Au début de la descente : le menu reste visible */ else if (currentScroll <= showThreshold) { document.body.classList.add("o2-header-visible"); } /* Plus bas : on détecte le sens du défilement */ else if (Math.abs(difference) >= directionThreshold) { if (difference > 0) { /* Descente : le menu disparaît vers le haut */ document.body.classList.add("o2-header-hidden"); } else { /* Remontée : le menu réapparaît */ document.body.classList.add("o2-header-visible"); } } else { /* Conserver l'état actuel lors des petits mouvements */ if (document.body.classList.contains("o2-header-hidden")) { document.body.classList.add("o2-header-hidden"); } else { document.body.classList.add("o2-header-visible"); } } previousScroll = currentScroll; ticking = false; } function requestUpdate() { if (!ticking) { window.requestAnimationFrame(updateHeader); ticking = true; } } /* État initial */ document.body.classList.add( (window.scrollY || 0) <= topThreshold ? "o2-header-at-top" : "o2-header-visible" ); window.addEventListener("scroll", requestUpdate, { passive: true }); window.addEventListener("resize", requestUpdate); updateHeader(); } if (document.readyState === "loading") { document.addEventListener( "DOMContentLoaded", initO2Header ); } else { initO2Header(); } })();
Défiler vers le haut