Вы можете попробовать вычислить позиции элементов списка относительно прокрутки <div>
, а затем отсканировать позиции, чтобы увидеть, какие из них совпадают с scrollTop
из <div>
.
Нечто подобное возможно:
var base = $('#scrollingDiv').offset().top;
var offs = [ ];
$('li').each(function() {
var $this = $(this);
offs.push({
offset: $this.offset().top - base,
height: $this.height()
});
});
$("#scrollingDiv").scroll(function() {
var y = this.scrollTop;
for(var i = 0; i < offs.length; ++i) {
if(y < offs[i].offset
|| y > offs[i].offset + offs[i].height)
continue;
// Entry i is at the top so do things to it.
return;
}
});
Живая версия (откройте консоль, пожалуйста): http://jsfiddle.net/ambiguous/yHH7C/
Возможно, вы захотите поиграть с нечеткостью if
, чтобы получить что-то, что работает разумно (видимый 1px едва ли делает элемент верхним), но основная идея должна быть достаточно ясной. Смешивание по высоте #scrollingDiv
позволит увидеть, какая <li>
находится внизу.
Если у вас много элементов списка, линейный поиск может оказаться не тем, что вам нужно, но вы сможете решить его без особых усилий.