@Untiwe

Как подписаться обратно на IntersectionObserver?

Пытаюсь сделать бесконечную страницу и подгружаю новые посты, когда на экране появляется блок, который в самом низу страницы. Делаю это с помощью IntersectionObserver. Вот код
window.addEventListener('load', posts_loading);
function posts_loading() {
    const options = {       // устанавливаем настройки
        root: null,         // родитель целевого элемента - область просмотра=
        rootMargin: '0px',  // без отступов=
        threshold: 0.1      // процент пересечения
    }

    // создаем наблюдатель
    const observer_page = new IntersectionObserver((entries, observer) => {
        //загружаем посты 
        load_posts()

    }, options);

    // подписываем блок для наблюдателя
    block_for_scroll = document.querySelector('.block_for_scroll')
    observer_page.observe(block_for_scroll)
}


Проблема в том, что новые данные загружаются не сразу, и пока они появятся на странице, событие срабатывает несколько раз. Я могу отписать блок от события при помощи observer.unobserve(target) но я не понимаю как можно подписать его обратно?
  • Вопрос задан
  • 26 просмотров
Решения вопроса 1
@Untiwe Автор вопроса
Нашел проблему, она была в не медленной загрузке и долгом нахождении в области видимости, а в том что он вызывал сам себя 2 раза + я сам подписывал и вызывал его в другом месте. В общем не надо удалять подписку и подписываться заново. Событие срабатывает когда элемент ВХОДИТ в зону видимости, а не уже находится в ней(т.е. уже работает как надо). Еще надо делать проверку isIntersecting не совсем понимаю ее смысл, хоть и прочитал документацию но без нее событие срабатывает по 2 раза.
// создаем наблюдатель
const observer_page = new IntersectionObserver((entries, observer) => {
        //загружаем посты 
        if (entries[0].isIntersecting) {
            load_posts();
        };
    }, options);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
В чом проблема то?
// подписываем блок для наблюдателя
    block_for_scroll = document.querySelector('.block_for_scroll')
    observer_page.observe(block_for_scroll)
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
XPOWER Одесса
от 3 000 до 5 500 $
07 мар. 2021, в 18:25
35000 руб./за проект
07 мар. 2021, в 18:22
5000 руб./за проект
07 мар. 2021, в 17:45
9000 руб./за проект