Как удалить добавленные классы при скролле?
У меня есть header шапка сайта котороя фиксирована.
При сколле страницы на 10px в низ добавляются классы к элементам.
Я не могу удалить классы когда страницу прокручиваю назад до самого верха.
По идее они долны пропадать.
Или это не так делается? Если допустим я прокурчу до самого низа и крутану на 10px в верх они наверное тогда удалятся я думаю, что ни есть хорошо.
function scroll() {
let elem = document.querySelectorAll('a.navigation-link') // Несколько ссылок.
if (pageYOffset = '10') {
document.querySelector('.header').classList.add('header-on') // Добавляю класс к элементу.
for (let i = 0; i < elem.length; i++) { // Добавляю классы к элементам.
elem[i].classList.add('navigation-link-on')
}
}
if (pageYOffset = '0') {
document.querySelector('.header').classList.remove('header-on')
for (let i = 0; i < elem.length; i++) {
elem[i].classList.remove('navigation-link-on')
}
}
}
window.addEventListener('scroll', scroll)
Ответы (1 шт):
Автор решения: UserTest013
→ Ссылка
Никогда не используйте addEventListener на 'scroll' для контроля видимых областей. Для этого существует IntersectionObserver. Вот пример добавления/удаления класса когда блок "уходит" с области видимости хотя бы на 1 пиксель.
const test1 = document.querySelector('.test1');
const callback = (entries) => {
const elem = entries.find((entry) => entry.isIntersecting);
if (elem) {
test1.classList.add('top');
} else {
test1.classList.remove('top');
}
}
const observer = new IntersectionObserver(callback, {
rootMargin: '0px',
threshold: 1
});
observer.observe(test1);
* {
margin: 0;
}
.test1 {
height: 150px;
background: #ff9393;
}
.test2 {
height: 600px;
background: #0f93ff;
}
.top {
background: #ff3030;
}
<div class="test1"></div>
<div class="test2"></div>