Предположим, у меня очень длинная страница, состоящая из 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?
Вы можете измерить смещение от вершины каждого div, и тот, который имеет положительное значение, в данный момент находится в вашем окне просмотра. Чтобы сгладить вещи немного, вы можете добавить к вычислениям половину высоты div. см. ниже код или проверьте этот jsbin: http://jsbin.com/gahoc/1/edit.
Для получения дополнительной информации предоставьте свой полный 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>
.container {
width : 100%;
height: 900px;
overflow-y: scroll;
}
.container > div {
border: 1px solid black;
margin : 3px auto;
width : 90%;
height : 600px;
}
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);
offet().top
был> 0, аoffset().bottom + el.height()
- <window.height
приscroll
окна.