Я не уверен в своевременности этого ответа, но у меня недавно был похожий вопрос, и мне помог следующий код:
if (item.y < container.verticalScrollPosition || item.y + item.height - container.verticalScrollPosition > container.height) {
// item is not (completely) visible
}
В основном это проверка по следующим критериям:
1) Находится ли позиция y над текущей вертикальной позицией прокрутки контейнера (т.е. за пределами верхней границы контейнера)?
2) Прокручивается ли нижняя позиция предмета за пределы нижней границы контейнера? Это рассчитывается с использованием нижней позиции элемента (то есть позиции y элемента плюс его высота) за вычетом текущей вертикальной позиции прокрутки.
Если вы хотите проверить все элементы в контейнере, вам придется пройтись по ним и проверить каждый на соответствие этим критериям. Вы можете добавить приведенный выше код в функцию и вернуть, виден ли элемент или нет. Возможно, есть лучший / более чистый способ, но я еще не нашел его.