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をバインドします。一致した要素のいずれかがスクロールして表示されると、関数が起動します。どの要素がイベントを発生させたかという関数も渡されます。
ライブを使用してこのイベントをバインドすることはできないため、新しい要素を追加した後に再バインドする必要があることに注意してください(これらの最後の要素にもイベントが必要であると想定しています)。
編集
私はここで間違っていました、:visibleは要素がビューポートにあるかどうかを返しません。ただし、ソースを編集したので、要素がビューポートにあるかどうかをチェックするようになりました。関数は、要素がビューポートの下にあるかどうかをチェックします。要素がビューポートの下にない場合は、ビューにスクロールされており、関数を実行する必要があると想定します。
EDIT2これをgooglechrome1.0
、firefox 3.0.10、IE7でテストしました