Каким образом Intersection Observer может отслеживать динамически подгружаемые элементы?

Приветствую.
Есть скрипт, который подгружает статьи с сервера (scroll + fetch).
Появилась задача менять title страницы и его адрес динамически, беря инфу из data атрибутов подгружаемых статей.
Т.е. доскролили вниз, статья подгрузилась, данные страницы изменились.
Проскролили вверх, до уже загруженной статьи, данные обновились (т.е. предыдущий title вернулся).
Решил обновлять title + url с помощью IntersectionObserver:

const changeInfo = (entries, observer) => {
        entries.forEach((entry) => {
            if (entry.isIntersecting && entry.intersectionRatio >= 0.55) {
                let title = entry.target.dataset.title;
                let url = entry.target.dataset.url;
                document.title = title;
                window.history.pushState(url, ' ', url);
            }
        });
    }
    const options = {
        threshold: 0.55
    }
    const observer = new IntersectionObserver(changeInfo, options);

    document.querySelectorAll('.селекторСтатьи').forEach((section) => {
        observer.observe(section);
    });


Скрипт нормально работает на странице, где dom не меняется, т.е. все элементы присутствуют изначально.
Но как быть, если статьи подгружаемы? Обсервер их не видит.
Перенос
document.querySelectorAll('.селекторСтатьи').forEach((section) => {
        observer.observe(section);
    });

в последний .then (где у фетча происходит вывод подгруженной статьи)
не помогает.
фетч...
        .then(function (html) {
            articleShow.insertAdjacentHTML('beforeEnd', html);

            document.querySelectorAll('.main_section_top').forEach((section) => {
                observer.observe(section);
            });            
    
        });
- не работает
  • Вопрос задан
  • 95 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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