4

フィルタリング付きのinfinite-ajax-scroll(https://github.com/webcreate/infinite-ajax-scroll)プラグインを使用しています。私は無限スクロールで動作するフィルターを持っていますが、私の問題は、スクロールが1つのフィルターの結果の最後を取得するたびに、別のフィルターが選択された後でもスクロールしなくなることです。したがって、フィルターが選択されているときに無限スクロールをリセットする必要がありますが、これをリセットする方法に関するドキュメントのどこにも見つからず、JQuery が得意ではないため、これを理解できません。

また、無限スクロールを必要としない特定のフィルターもあり、それらを無効にする方法も必要です。

$('.filter a').click(function() {
    //reset scroll somehow
    //setTimeout("jQuery.ias({container: '#container'})",1000);
    var $this = $(this);
    var URL = $this.attr('href');
    loadMoreItems(URL, $this);
});
return false;
});

jQuery.ias({
    container: '#container', // main container where data goes to append
    item: '.element', // single items
    pagination: '.paginate', // page navigation
    next: '.paginate a', // next page selector
    loader: '<img src="public/img/ajax-loader.gif"/>', 
    noneleft: 'No more discounts for your selection', 
    triggerPageThreshold: '10', 
    trigger: "Load more items",
    history: false, 
    thresholdMargin: -350
});
4

3 に答える 3

3

janfoeh が言ったように、プラグインを適切に再初期化するものは何もありません。ウィンドウからスクロールをバインド解除し、要素の init を再度呼び出す必要があります。

再初期化を簡単にするために、初期化を関数にラップすることをお勧めします。

$('.filter a').click(function() {
    $(window).unbind('scroll');
    initscroll();
});

function initscroll(){
    jQuery.ias({
        container: '#container', // main container where data goes to append
        item: '.element', // single items
        pagination: '.paginate', // page navigation
        next: '.paginate a', // next page selector
        loader: '<img src="public/img/ajax-loader.gif"/>', 
        noneleft: 'No more discounts for your selection', 
        triggerPageThreshold: '10', 
        trigger: "Load more items",
        history: false, 
       thresholdMargin: -350
    });
}
initscroll();

そのため、ロード時とフィルター時に initsscroll を呼び出す必要があります。

于 2013-12-08T00:56:32.653 に答える
2

Infinite Ajax Scrollのバージョン 2 以降では、この種の問題を処理するために設計された新しいメソッドがあります。新しいメソッドdestroy()をunbind()のエイリアスとして呼び出すと、あらゆるウィンドウまたはドキュメント イベントから IAS のバインドが解除されます。その後、IAS オブジェクトを再バインドできます。

$('.filter a').click(function() {
    setTimeout(function() { 
      ias.destroy(); 
    }, 1000);

    var $this = $(this);
    var URL = $this.attr('href');
    loadMoreItems(URL, $this);

    ias.bind();
});  

似たようなもので、テストされていません。このメソッドはhttp://infiniteajaxscroll.com/docs/methods.htmlで確認できます

于 2014-02-28T11:25:10.570 に答える