// Scrolling down/up
if (currentY < previousY) {
if (currentRatio > previousRatio && isIntersecting) {
state.textContent ="Scrolling down enter"
} else {
state.textContent ="Scrolling down leave"
}
} else if (currentY > previousY && isIntersecting) {
if (currentRatio < previousRatio) {
state.textContent ="Scrolling up leave"
} else {
state.textContent ="Scrolling up enter"
}
}
const targetNavbarDesktop = document.querySelector('.fixed-navbar-desktop');
const targetNavbarMobile = document.querySelector('.fixed-navbar-mobile');
const fixedNavbarDesktop = document.querySelector('.navbar');
const fixedNavbarMobile = document.querySelector('.navbar');
const obFixedNavbar = new IntersectionObserver(obCallback);
function obCallback(payload) {
let prevScrollpos = 0;
if (document.documentElement.clientWidth > 992) {
if (payload[0].boundingClientRect.y < 0) {
document.querySelector('.header').style.marginBottom = fixedNavbarDesktop.offsetHeight + 'px';
fixedNavbarDesktop.classList.add('navbar_fixed');
} else {
fixedNavbarDesktop.classList.remove('navbar_fixed');
document.querySelector('.header').style.marginBottom = '0';
}
} else {
if (payload[0].boundingClientRect.y < 0) {
document.querySelector('.header').style.marginBottom = fixedNavbarMobile.offsetHeight + 'px';
fixedNavbarMobile.classList.add('navbar_fixed');
window.addEventListener('scroll', function () {
let currentScrollpos = window.pageYOffset;
if (currentScrollpos < prevScrollpos) {
fixedNavbarMobile.classList.add('scroll-up');
} else {
fixedNavbarMobile.classList.remove('scroll-up');
}
prevScrollpos = currentScrollpos;
})
} else {
document.querySelector('.header').style.marginBottom = '0';
fixedNavbarMobile.classList.remove('navbar_fixed');
fixedNavbarMobile.classList.remove('scroll-up');
}
}
}
if (document.documentElement.clientWidth > 992) {
obFixedNavbar.observe(targetNavbarDesktop);
} else {
obFixedNavbar.observe(targetNavbarMobile);
};
var sectionInfo = document.querySelector('.header__section-info').getBoundingClientRect().top + window.pageYOffset;
var sectionInfo = document.querySelector('.header__section-info').offsetHeight;
Скрыть / показать заголовок при прокрутке вниз / вверх, используя чистый JavaScript с IntersectionObserver
Все мы знаем https://wicky.nillia.ms/headroom.js/, который является отличным виджетом для отображения / скрытия заголовка при прокрутке вниз / вверх. Я бы использовал этот виджет, но мои случаи использования немного отличаются.
Я пытаюсь построить это сейчас с IntersectionObserver.