API IntersectionObserver и пороговые значения
Создавайте наблюдатели и настраивайте пороги видимости
«API IntersectionObserver и пороговые значения» — бесплатный урок HTML Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения HTML Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс HTML Academy содержит 4 уроков всего.
Что делает IntersectionObserver
IntersectionObserver вызывает обратные вызовы, когда элемент входит в область просмотра или покидает её (либо пересекает другой контейнер прокрутки). Это современная и производительная альтернатива обработчикам прокрутки — браузер выполняет вычисления, а ваш код запускается только при фактических изменениях видимости.
Создание
new IntersectionObserver(callback, options) создаёт observer. Обратный вызов получает массив объектов entry, когда пересечения изменяются; параметры определяют, какой контейнер отслеживается и при каких порогах.
const observer = new IntersectionObserver((entries) => {
for (const entry of entries) {
if (entry.isIntersecting) {
console.log("Visible:", entry.target);
}
}
});
observer.observe(document.querySelector(".hero"));Объект IntersectionObserverEntry
У каждого объекта entry есть target (наблюдаемый элемент), isIntersecting (логическое значение), intersectionRatio (от 0 до 1), boundingClientRect, intersectionRect и time. Используйте isIntersecting для двоичной проверки видимости, а intersectionRatio — для логики, зависящей от процента видимой области.
Параметр порога
{ threshold: 0.5 } вызывает обратный вызов каждый раз, когда коэффициент пересечения пересекает отметку 50%. Используйте массив [0, 0.25, 0.5, 0.75, 1], чтобы срабатывание происходило при каждом шаге в четверть — это удобно для создания индикаторов прогресса или аналитики, сообщающей «процент видимости».
Параметр корневого элемента
По умолчанию observer измеряет пересечение с областью просмотра. Установите root: someScrollableDiv, чтобы измерять его относительно внутреннего контейнера прокрутки — например, виртуализированного списка внутри элемента фиксированной высоты.
Параметр rootMargin
rootMargin: "200px" увеличивает область наблюдения на 200 пикселей с каждой стороны. Используйте его, чтобы срабатывание происходило раньше (начинайте загружать изображения за 200 пикселей до их появления в области просмотра) или позже (срабатывайте только когда элемент полностью покинул область просмотра).
new IntersectionObserver(callback, {
rootMargin: "0px 0px 200px 0px",
threshold: 0
});observe и unobserve
observer.observe(element) начинает наблюдение за элементом, а observer.unobserve(element) прекращает его. Всегда прекращайте наблюдение, когда обратный вызов больше не нужен (например, после однократного запуска отложенной загрузки), чтобы освободить память.
disconnect
observer.disconnect() прекращает наблюдение за всеми отслеживаемыми элементами. Вызывайте его при размонтировании компонента или когда observer больше не нужен — это предотвращает утечки, вызванные observer, продолжающими работать после завершения сценария.
Асинхронная доставка
Обратные вызовы доставляются асинхронно и пакетно — множество изменений пересечения при быстрой прокрутке вызывают один обратный вызов со всеми объектами entry, а не по одному на элемент. Это даёт большой выигрыш в производительности по сравнению с обработчиками прокрутки, которые срабатывают при каждом событии прокрутки.
Начальный обратный вызов срабатывает сразу
Когда вы начинаете наблюдать за новым элементом, обратный вызов срабатывает почти немедленно один раз с его текущим состоянием — это удобно для обработки элементов, уже видимых в момент начала наблюдения, без отдельного пути инициализации.
Распространённые случаи использования
Отложенная загрузка изображений, запуск анимаций при появлении в области просмотра, бесконечная прокрутка (наблюдение за sentinel рядом с концом списка), отслеживание статей, которые пользователь действительно прочитал, переключение липкого заголовка в зависимости от видимости главного блока.
Проверка знаний
В чём разница между порогом 0 и порогом 1 в IntersectionObserver?
Итоги
IntersectionObserver вызывает обратные вызовы при изменениях видимости элементов, обеспечивая производительность и пакетную обработку, — заменяйте им обработчики прокрутки в логике видимости. Настройте его с помощью порога (от 0 до 1 или массива), корневого элемента (пользовательского контейнера прокрутки) и rootMargin (увеличение или уменьшение наблюдаемой области). Используйте observe/unobserve для отдельных элементов; disconnect очищает всё.
Часто задаваемые вопросы
Урок «API IntersectionObserver и пороговые значения» бесплатный?
Да — полный текст урока «API IntersectionObserver и пороговые значения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс HTML Academy, подпишись на CoddyKit PRO. Курс HTML Academy содержит 4 уроков всего.
Чему я научусь в уроке «API IntersectionObserver и пороговые значения»?
Создавайте наблюдатели и настраивайте пороги видимости Ты практикуешь HTML Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать HTML Academy?
Предыдущий опыт не требуется. HTML Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «API IntersectionObserver и пороговые значения»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке HTML Academy?
Да. Каждый урок HTML Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- API IntersectionObserver и пороговые значения
- Отложенная загрузка с IntersectionObserver
- Реализация бесконечной прокрутки
- Настройка анимаций, связанных с прокруткой