Почему не срабатывает код на scroll?
При прокрутке к заголовку "FIRE", ему должен присваиваться класс "_active" . Но это почему то не происходит. Подскажите, что не так : https://codepen.io/5dc8b3/pen/WNxpjPy?editors=1111
const animItems = document.querySelectorAll('._anim-items');
if(animItems.length > 0) {
window.addEventListener('scroll', animOnScroll);
function animOnScroll() {
for(let index = 0; index < animItems.length; index++) {
const animItem = animItems[index];
const animItemHeight = animItem.offsetHeight;
const animItemOffset = offset(animItem).top;
console.log(animItemOffset)
const animStart = 4;
let animItemPoint = window.innerHeight - animItemHeight / animStart;
if (animItemHeight > window.innerHeight) {
animItemPoint = window.innerHeight - window.innerHeight / animStart;
}
if ((pageYOffset > animItemOffset - animItemPoint) && pageYOffset < (animItemOffset + animItemHeight)) {
console.log('bibobe')
animItem.classList.add('_active');
} else {
animItem.classList.remove('_active');
}
}
}
function offset(el) {
const rect = el.getBoundingClientRect(),
scrollLeft = window.pageXOffset || document.documentElement.scrollLeft,
scrollTop = window.pageYOffset || document.documentElement.scrollTop;
return { top: rect.top + scrollTop, left: rect.left + scrollLeft }
}
animOnScroll();
}
Ответы (1 шт):
Автор решения: Aziz Umarov
→ Ссылка
Посмотрите на кусочек отсюда Думаю, что у вас может не работать из-за пропусков события указанный в ссылке.
Пропуск тактов события прокрутки
Поскольку события прокрутки могут запускаться с высокой скоростью, обработчик событий не должен выполнять вычислительно-емкие операции, такие как модификации DOM.