Вы можете написать свой собственный простой плагин, используя jQuery.
$.belowViewport = function(elem){
var port = $(window).scrollTop() + $(window).height();
return port <= $(elem).offset().top;
}
$.fn.onBecomeVisible = function( fn ){
var obj = this;
$(window).scroll( function() {
obj.each( function() {
if(!$.belowViewport(this) && !$(this).data('scrollEventFired')){
$(this).data('scrollEventFired', true);
fn(this);
}
});
});
return this;
}
А потом используйте это так
$('.elements:last').onBecomeVisible( function(elem){ loadNewElems(); } );
Скрипт свяжет fn с каждым подходящим элементом. Функция будет запущена, когда любой из соответствующих элементов прокручивается в поле зрения. Также будет передана функция, какой элемент вызвал событие.
Обратите внимание, что вы не можете связать это событие, используя live, поэтому вам придется перепривязывать его после добавления новых элементов (при условии, что вы хотите событие для последнего из них тоже).
EDIT
Я был не прав здесь: visible не возвращает погоду или нет элемент находится в области просмотра. Однако я отредактировал исходный код, поэтому теперь он проверяет, находится ли элемент в области просмотра. Функция проверяет, находится ли элемент под областью просмотра, мы предполагаем, что если он не находится ниже области просмотра, он был прокручен, и мы должны выполнить функцию.
EDIT2
Протестировано это в Google Chrome 1.0, Firefox 3.0.10 и IE7