Вопрос нужен, чтобы оценить, знает ли кандидат стандартные браузерные API для определения, находится ли элемент в зоне видимости.
Основной API для отслеживания видимости элементов — IntersectionObserver. Он позволяет асинхронно узнавать, когда элемент появляется или исчезает из viewport. В более простых случаях используют события скролла и getBoundingClientRect, но это менее эффективно. Современные приложения почти всегда выбирают IntersectionObserver.
Отслеживание видимости элементов важно для lazy loading, виртуализации и аналитики.
IntersectionObserver сообщает:
когда элемент входит в область видимости
насколько он видим (intersection ratio)
относительно какого контейнера считается видимость
Ключевые особенности:
работает асинхронно
не требует ручной обработки scroll-событий
оптимизирован на уровне браузера
const observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
if (entry.isIntersecting) {
// элемент виден
}
})
})
observer.observe(element)
Scroll + getBoundingClientRect
ручной расчёт координат
высокая частота вызовов
риск проблем с производительностью
ResizeObserver (косвенно)
отслеживает изменение размеров
используется совместно с IntersectionObserver
Visibility API
определяет, активна ли вкладка
не про элементы, а про страницу целиком
lazy loading изображений → IntersectionObserver
аналитика просмотра блоков → IntersectionObserver
простые сценарии → getBoundingClientRect (с осторожностью)
IntersectionObserver — стандартный и наиболее эффективный способ отслеживать видимость элементов. Ручные решения через scroll подходят только для простых или специфических случаев.