JavaScript

Ленивая загрузка через IntersectionObserver

Algonexys · 07.08.2026 · 👁 0

Подгрузка изображений и бесконечная прокрутка без обработчиков scroll.

Код

// Ленивые изображения: <img data-src="/media/photo.jpg" alt="">
const imageObserver = new IntersectionObserver((entries, observer) => {
  entries.forEach((entry) => {
    if (!entry.isIntersecting) return;
    const img = entry.target;
    img.src = img.dataset.src;
    img.classList.add('loaded');
    observer.unobserve(img);
  });
}, { rootMargin: '200px 0px', threshold: 0.01 });

document.querySelectorAll('img[data-src]').forEach((img) => imageObserver.observe(img));

// Бесконечная прокрутка: наблюдаем за «сторожевым» элементом внизу списка
let page = 1;
const sentinel = document.querySelector('#sentinel');
const pageObserver = new IntersectionObserver(async ([entry]) => {
  if (!entry.isIntersecting) return;
  const html = await fetch(`/items/?page=${++page}`).then((r) => r.text());
  sentinel.insertAdjacentHTML('beforebegin', html);
});
if (sentinel) pageObserver.observe(sentinel);