Javascript: Как узнать находится ли DOM элемент в области видимости?

Пишу зесь, поскольку верю в хабр.
При создании iFrame-приложения для Вконтакте столкнулся с проблемой: не могу ревлизовать endless scroll.
Т.е. в первом приближении — когда скролл ставится на мой iFrame — все работает замечательно.
Но при подаче приложения на апрув получил ответ от администрации — «увеличте высоту iframe для того чтобы избежать появления скрола». Естественно, убрать скролл не получится — тогда придется использовать постраничный вывод, чего хочется избежать.
Выход — использовать для вывода скрол родительского окна. И вот она проблема: Согласно браузерной политики безопасности, из iframe и frame запрещен доступ к любым родительским элементам, если домены не одинаковы.
Т.е. я даже не могу получить доступ к объектам window.parent и top.

Вконтакте API дает мне возможность определить позицию скрола родительского окна, используя событие scrollTop: «Вызывает событие onScrollTop с текущим положением прокрутки окна ВКонтакте». К сожалению, знать положение скрола мало — нет информации об общей высоте окна.

Поигравшись некоторое время, решения я не нашел. Поэтому решил подойти к проблеме с другой стороны — возможно есть механизм для определения видим ли DOM-элемент пользователю?

Все найденные решения опирались на scrollPosition контейнера. Опять-таки не подходит.

Есть какие-нибудь идеи?

PS: спасибо что прочитали )
  • Вопрос задан
  • 5836 просмотров
Пригласить эксперта
Ответы на вопрос 3
AlexXYZ
@AlexXYZ
O Keep Clear O
>> К сожалению, знать положение скрола мало — нет информации об общей высоте окна.

Так а вроде как window.innerHeight как раз и говорит о высоте окна. Так что имея координаты положения элемента в документе, положение скроллингов и высоту окна вполне уже можно определить видим объект или нет.
Ответ написан
Есть плагин jquery viewport checker
Ответ написан
Комментировать
Наберите в гугле: javascript check DOM element visibility

Первые ссылки будут содержать примеры решения данной задачи.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы