@Vasya-prijevalskij

Как правильно работать с Intersection Observer?

Привет
window.onload = () => {
        const observer = new IntersectionObserver((entries, observer) => {
            entries.forEach((entry) => {
                const activeId = entry.target.id,
                    activeImg = document.querySelector(`.upgrade-about__img[data-upgradeAbout="${activeId}"]`),
                    activeLink = document.querySelector(`.upgrade-about__nav-link[href="#${activeId}"]`);

                if (entry.isIntersecting) {
                    activeImg.classList.add('show');
                    upgradeAboutNav.classList.add('show');
                    activeLink.classList.add('active');
                } else {
                    activeImg.classList.remove('show');
                    activeLink.classList.remove('active');
                }
            });
        }, {threshold: .3});
        upgradeAboutContent.forEach(el => observer.observe(el));


Есть скрипт, который отслеживает пересечение целевого html элемента. При пересечении каждого целевого элемента (а именно, когда в области просмотра он появляется на 30 проц.) другим элементам (activeImg и activeLink) добавляются классы css, а при переходе за границу каждого целевого элемента они соответственно удаляются. Скрипт отрабатывает отлично, но есть один вопрос: а как можно сделать так, чтобы именно при пересечении каждого нового целевого объекта со старого удалялся класс. Т.е. сейчас, допустим, если в область видимости попадает первый элемент и 30 процентов второго, то classList.add добавляется в оба элемента. Как первый элемент исчезает из области видимости, класс, конечно, удаляется, но как можно отследить пересечение следующего элемента, чтобы у предыдущего удалить класс именно в момент пересечения следующего за ним элемента?
Т.е. вошли в область видимости первого, прошли его, как только вошли в область видимости второго элемента, с первого удалили класс, не важно остался в области видимости он или нет.
Кто-то сталкивался с подобным?
  • Вопрос задан
  • 132 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы