4

複数のプラグインがあることは知っていますが、どうすれば自分のプラグインを思い通りに動作させることができるのでしょうか。

ajaxLoadActivityまず、ページの一番下までスクロールするときに、「もっと見る」ボタンで呼び出される関数をトリガーしたいと思います。

$(window).scroll(function() {

            if ( $(window).scrollTop() >= ( $(document).height() - $(window).height() ) )

                if ( $('ol.astream > .loadCount:last > li').attr('id') == "noMoreActivities" )
                    return false;

                ajaxLoadActivity('bottom', true);
                console.log('fired');

        });

これを自分でやろうとすると、おそらく誰もが遭遇する問題があります。問題は、関数が複数回起動されることです。この関数ajaxLoadActivityは、すべての ajax 処理を実行<li>し、既存の に項目を追加します<ol>。この機能は、「もっと見る」ボタンで使用するだけで完璧に機能します。

ただし、ページの一番下までスクロールするだけで同じ機能をトリガーするにはどうすればよいのでしょうか。しかし、私はそれを一度だけ呼び出したい-次に、ものがロードされるまで待ってから、底に再び到達した場合にのみ、関数を再度起動できるようにします。

そして、上記のサンプル コードに既にある例外があります。最後の要素の ID が の場合noMoreActivities、関数を再度起動したくありません。アクティビティがなくなるからです。

関数を一度だけ起動して、リクエストが発生するまで待つ方法はありますか?

4

2 に答える 2

1

使用していると仮定すると$.post、関数でそれを返すことができ、ajaxLoadActivity実行されているかどうかを確認できます

var ajax;

$(window).scroll(function() {

    if ( $(window).scrollTop() >= ( $(document).height() - $(window).height() ) )

        if ( $('ol.astream > .loadCount:last > li').attr('id') == "noMoreActivities" )
            return false;

        if (ajax) {

            return false; // don't make another request, let the current one complete, or
            // ajax.abort(); // stop the current request, let it run again
        }

        ajax = ajaxLoadActivity('bottom', true);
        console.log('fired');

});

function ajaxLoadActivity(one, two) {

    return $.post(/* stuff */);
}
于 2012-05-04T17:13:12.587 に答える
0

$(window).scrollTop() == ( $(document).height() - $(window).height() ) は、呼び出しを一度だけ実行します。それを試してみてください。

于 2013-12-20T11:37:46.627 に答える