JQuery проверка текущего Div в браузере

0

Предположим, у меня очень длинная страница, состоящая из 10 разделов: -

<div id="1"></div>
<div id="2"></div>
<div id="3"></div>
<div id="4"></div>
<div id="5"></div>
<div id="6"></div>
<div id="7"></div>
<div id="8"></div>
<div id="9"></div>
<div id="10"></div>

могу ли я использовать jquery для проверки текущего div, который я просматриваю в пределах высоты браузера 900px?

  • 1
    Да. Проверьте, чтобы offet().top был> 0, а offset().bottom + el.height() - < window.height при scroll окна.
  • 0
    не могли бы вы привести простой пример? Большое спасибо!
Показать ещё 4 комментария
Теги:

1 ответ

0

Вы можете измерить смещение от вершины каждого div, и тот, который имеет положительное значение, в данный момент находится в вашем окне просмотра. Чтобы сгладить вещи немного, вы можете добавить к вычислениям половину высоты div. см. ниже код или проверьте этот jsbin: http://jsbin.com/gahoc/1/edit.

Для получения дополнительной информации предоставьте свой полный html (и всегда помните, что идентификаторы не должны начинаться с числа).

HTML:

 <div class="container">
    <div id="c1"></div>
    <div id="c2"></div>
    <div id="c3"></div>
    <div id="c4"></div>
    <div id="c5"></div>
    <div id="c6"></div>
    <div id="c7"></div>
    <div id="c8"></div>
    <div id="c9"></div>
    <div id="c10"></div>
  </div>

CSS:

.container {
  width : 100%;
  height: 900px;
  overflow-y: scroll;
}

.container > div {
  border: 1px solid black;
  margin : 3px auto;
  width : 90%;
  height : 600px;
}

JavaScript:

var $currentElement = null;

var highlightViewportElement =  function(){

  // reset previous element border
  if ($currentElement){
    $currentElement.css('border', '1px solid black');
  }
  // Iterate trough all the contained divs for their offset on top
  $('.container > div').each(function(){
    var $element = $(this);

    if (($element.offset().top + $element.height()/2)  >= 0){
      $currentElement = $element;
      return false;
    }
  });

  // Demo
  // a styling feedback
  $currentElement.css('border', '1px solid red');
  // outputing active element id
  $('#output').text($currentElement.attr('id'));
};
// Executing for the first time without the help of the scroll or touchmove event
highlightViewportElement();

$('.container').on('touchmove scroll',highlightViewportElement);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню