Вы можете сделать это, например, используя собственную функцию .filter ():
var st = $('div').scrollTop(),
sh = $('div').height(),
sb = st + sh - 1;
$('p').css({
background: '#ccc'
});
$('p').filter(function() {
var $this = $(this),
h = $this.height(),
t = $this.position().top,
b = t + h - 1;
return (t >= st && b <= sb);
}).css({
background: 'red'
});
См. ДЕМО: http://jsfiddle.net/qnuxs/3/
Каждые пять секунд он делает видимые абзацы красными.Он ждет 5 секунд, чтобы вы могли прокрутить и увидеть, что оставшиеся абзацы не были красными.
Другая демонстрация: http://jsfiddle.net/qnuxs/4/
Эта версия обновляет цвета во время прокрутки.
Обратите внимание, что расчеты кажутся неверными, поэтому он отключен на несколько пикселей, но этого должно быть достаточно, чтобы начать работу.Возможно, вам нужно использовать .innerHeight () для div или, возможно, изменить что-то еще, но это идея: получить позицию прокрутки и высоту div для вычисления верхней и нижней части видимой части и сравнить эти значения с верхними и нижними координатами (относительноdiv) каждого абзаца, и сделайте так, чтобы ваш фильтр выбирал только те, которые находятся в правильном диапазоне.