Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: IntersectionObserver, infinite scroll, lazy loading, performance

Как использовать IntersectionObserver для реализации бесконечного скролла?

Проверяет понимание IntersectionObserver API для эффективной реализации бесконечного скролла без лишних вычислений.

Короткий ответ

IntersectionObserver позволяет асинхронно отслеживать пересечение элемента с областью просмотра. Для бесконечного скролла создайте наблюдатель, который при пересечении с элементом-триггером загружает новые данные и обновляет позицию триггера. Это эффективнее, чем слушать событие scroll, так как работает на уровне браузера без постоянных вычислений.

Длинный ответ

Что такое IntersectionObserver и зачем он нужен

IntersectionObserver — это API браузера, который позволяет асинхронно наблюдать за пересечением целевого элемента с его родителем или областью просмотра. В контексте бесконечного скролла он заменяет дорогостоящие обработчики события scroll, которые вызываются сотни раз в секунду и могут тормозить интерфейс.

Как работает бесконечный скролл с IntersectionObserver

Основная идея: разместить в конце списка невидимый элемент-триггер (sentinel). Когда пользователь прокручивает до него, срабатывает колбэк наблюдателя, и вы загружаете следующую порцию данных. После загрузки триггер снова оказывается внизу, и процесс повторяется.

Пример реализации

// HTML: <div id="sentinel"></div>

const sentinel = document.getElementById('sentinel');
let page = 1;

const observer = new IntersectionObserver(async (entries) => {
  if (entries[0].isIntersecting) {
    const data = await fetch(`/api/items?page=${page}`);
    const items = await data.json();
    // Добавляем элементы в список
    items.forEach(item => {
      const div = document.createElement('div');
      div.textContent = item.name;
      document.body.insertBefore(div, sentinel);
    });
    page++;
  }
});

observer.observe(sentinel);

Важные детали

  • Настройте порог срабатывания через опцию threshold (например, 0.1 для ранней подгрузки).
  • Используйте rootMargin, чтобы начать загрузку до того, как триггер появится на экране.
  • Не забывайте отключать наблюдателя, когда данные закончились, чтобы избежать лишних запросов.

Вывод

IntersectionObserver — это современный и производительный способ реализации бесконечного скролла. Он подходит для лент новостей, списков товаров и любых динамических списков, где важна плавность прокрутки и экономия ресурсов.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

  • HTML

    HTML

Ключевые слова

#IntersectionObserver

#infinite scroll

#lazy loading

#performance

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию