2013-02-22 2 views
0

Может ли кто-нибудь сказать мне способ найти первый абзац, видимый внутри окна браузера в документе HTML. Значит, я хочу, чтобы первый абзац не был внутри документа (который может быть больше, чем область окна), но внутри окна браузера (видимый экран).Javascript найти верхнюю часть абзаца в окне

* PS кроме получать все элементы «P» в документе и обходе найти первый видимый один *

+2

Я сомневаюсь, что это возможно без прокрутки всех тегов 'p'. –

+0

Существует [как к сказать, если-а-дом-элемент-это-видимый в-ток-видовом] [1] [1]: HTTP: // StackOverflow. com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport –

+0

Спасибо, если это поможет! – Vegito1044

ответ

0

Я думаю, что это то, что вы хотите:

$("p:visible:first") 
+0

Если я понял его правильно, он хочет получить первую «р» в видимой области, а не весь документ. –

+0

на jQuery http://api.jquery.com/visible-selector/ они упоминают «Видимые элементы имеют ширину или высоту, большую, чем ноль». но нет ничего о том, чтобы быть видимым ** внутри ** области отображаемого порта. –

0

Это должно работа:

$(document).ready(function(){ 
    var paragraphs = $('p'); 
    var scrollTop = $(window).scrollTop(); 
    var scrollBtm = scrollTop + $(window).height(); 
    paragraphs.each(function(e){ 
     var top = $(this).offset().top; 
     if (top > scrollTop && top < scrollBtm){ 
      alert("Win"); 
      return false; 
     } 
    }); 
}); 

Изменить: Я понимаю, что это traversin g p, но, по крайней мере, с «return false» вы не будете перебирать все, только каждый выше текущего представления.

Edit 2: Создание массива абзацев на document.ready

+0

Спасибо за помощь! Но по мере того, как пользователь прокручивается все больше и больше, потребуется больше времени, поэтому не будет лучше в html-документах с большим размером. – Vegito1044

+0

Если вы ищете ближайший p-тэг в верхней части экрана, это единственный вариант, который я думаю у тебя есть. Однако, если вы просматриваете статьи, записи в блогах и т. Д., И хотите выделить верхний тег p в одном из них, вы можете разделить его на divs или теги разделов, чтобы увеличить время поиска. – Aaron

+0

Первое, что я могу придумать, чтобы сделать скрипт более эффективным, - это получить объект jQuery абзацев один раз, когда документ загружается, а не каждый раз, когда вы хотите проверить (изменил мой код выше, чтобы сделать это). Кроме того, вы могли бы также присоединить верхнюю координату смещения к каждому абзацу в начале, используя функцию данных jQuery, хотя эти координаты могут меняться в зависимости от вашей страницы. – Maloric

0

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