CSS html { scroll-behavior: smooth; } .banner_on { height: 50vh; width: 100%; background: #acc; display: grid; place-content: center; } .fixed-content { position: fixed; width: 80%; top: 0; left: 50%; transform: translateX(-50%); pointer-events: all; z-index: 2; background: #7777; text-align: center; display: block; padding-block: 1em; } .banner_off { height: 100vh; background: #cac; display: grid; place-content: center; } .hidden { animation: fade 0.3s ease-in-out forwards; pointer-events: none; } @keyframes fade { from { opacity: 1; } to { opacity: 0; } } .visible { animation: fadeOut 0.2s ease-in-out forwards; pointer-events: all; } @keyframes fadeOut { from { opacity: 0; } to { opacity: 1; } }
script const fixedElement = document.querySelector(".fixed-content"); const targetElement = document.querySelector(".banner_off"); let isHidden = false; window.addEventListener("scroll", () => { const fixedElementRect = fixedElement.getBoundingClientRect(); const targetElementRect = targetElement.getBoundingClientRect(); if ((fixedElementRect.bottom >= targetElementRect.top) & (fixedElementRect.top <= targetElementRect.bottom)) { if (!isHidden) { fixedElement.classList.remove("visible"); fixedElement.classList.add("hidden"); isHidden = true; } } else { if (isHidden) { fixedElement.classList.add("visible"); fixedElement.classList.remove("hidden"); isHidden = false; } } });