Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Видит ли пользователь элемент?


Автор: beaver 24.7.2007, 05:17
есть страница, часть страницы находиться за пределами отображаемой в окне браузера части.
пользователь покручивает окно, доходит до определенного элемента страницы.
необходимо в тот момент, когда этот элемент увидит посетитель выполнить некоторые действия.

можно ли реализовать такое, если да, то как?
точная реализация не нужна (все равно потом перелапачу под себя), подскожите хотябы направление: функции, команды, примерный алгоритм

Автор: SelenIT 24.7.2007, 17:16
Задача интересная... Попробовал "в лоб" (учитывая только вертикальную координату):
Код

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<div id="look">test</div>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<script>
var b = document.body;
var t = document.getElementById('look');
function test() {
   if ((b.scrollTop < t.offsetTop) && ((b.scrollTop + b.clientHeight) > (t.offsetTop + t.offsetHeight))) {
      alert('Меня видно, ура!');
   }
}
onscroll = onresize = test;
</script>

В таком простейшем виде вроде работает... Правда, если искомый элемент будет где-то внутри сложной верстки (т.е. вместо одного offsetTop понадобится проход по цепочке offsetParent-ов и т.п.), боюсь, оно может стать слишком жадным до ресурсов (придется кешировать все, что можно). Но единственная альтернатива, которую я вижу - делать аналогичную проверку периодически по таймеру...

Автор: beaver 24.7.2007, 19:46
спасибо, сейчас попробую

а по поводу сложной верстки - просто можно этот контрольный элемент вынести за рамки всех элементов верстки, хотя бы дивом с абсолютным позиционированием

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)