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;
}
}
});