2009-05-08 4 views
1

ブラウザキャンバスで特定の要素が表示されるとすぐにカスタムイベントを提供するjavascriptライブラリはありますか?onBecomes clickless paginationのJavascriptで表示可能?

基本的な考え方は、リストの最後の要素が画面に表示されるとすぐに、次の10個の要素を読み込み、ユーザーが「次のページ」ボタンをクリックする必要がないようにします。 これを実現するには、最後の要素が表示されるとすぐに発生するonBecomesVisibleイベントが便利です。このようなものがありますか?

Slashdotこのようにフロントページの読み込みを行います。

答えて

7

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; 
} 

、スクリプトがマッチしellementsのそれぞれにFNを結合するこの

$('.elements:last').onBecomeVisible(function(elem){ loadNewElems(); }); 

のようにそれを使用しています。一致した要素のいずれかがスクロールして表示されると、この関数が起動します。この関数は、どの要素がイベントを発生させたかを渡します。

ライブを使用してこのイベントをバインドすることはできませんので、新しい要素を追加した後にリバインドする必要があります(最後のイベントにイベントを追加することを前提としています)。

EDIT
私は、ここに間違っていた:目に見える要素がビューポート内で天気をかを返しません。しかし、ソースを編集して、要素がビューポート内にあるかどうかをチェックします。この関数は、要素がビューポートの下にあるかどうかをチェックします。ビューポートの下にない場合、ビューにスクロールされ、関数を実行する必要があると想定します。 Googleのクロム1.0でこれをテストし

EDIT2
、Firefoxの3.0.10およびIE7

+0

+1、これはうまくいくと素晴らしいです。 (スクロールのスペルを修正しました) - それを試してみてください。 – cgp

2

ダスティン・ディアス(本当にスマートだし、あなたが彼のものの続きを読むべきでは)detecting when an element has scrolled into view.

に2007年に記事を書きましたあなたが必要とするものと正確に一致するかもしれません。

0

代替アイデアは常にすべてを隠す/表示するためのラッパー関数を使用することです。つまり、直接style.display='none';または$("#something").hide();を実行するのではなく、常に要素のIDを渡す独自の関数を使用します。

これで、要素が表示/非表示になったときや、イベントハンドルを設定するタイミングをより簡単に追跡できます。

+0

いいえ、要素が表示されたらスクロールされ、表示されていない場合は起動されません。 –

関連する問題