2017-02-08 2 views
0

私のページで無限にスクロールするための次の機能があります。 if文をトリガーするページに移動すると、それ以降のすべてのページがスクロールハンドラーをトリガーし続けます。私はスクロールするたびに 'ウィンドウスクロール'をコンソールに表示するが、 'if statement true'をトリガーしないので、これを知っている。 window.scrollは#infinite-scrollingのページでのみ動作するようにするにはどうすればよいですか?window.scrollハンドラが他のページに永続することを防止する

function initPagination() { 
    var paginate = function(buttonPress) { 
    var url = $('.pagination .next_page').attr('href'); 

    if (buttonPress || (url && $(window).scrollTop() > $(document).height() - $(window).height() - 60)) { 
     // TODO - Removing this line was causing duplicates to load so it's worth investigating the cause 
     $('.pagination').html('Please Wait...'); 
     return $.getScript(url); 
    } 
    }; 

    if ($('#infinite-scrolling').length) { 
    console.log('if statement true'); 
    $(window).scroll(function() { 
     console.log('window scroll'); 
     paginate(false); 
    }); 
    return $(window).scroll(); 
    } 

    $('#infinite-scrolling-button').on('click', function() { 
    $(this).html('Loading...'); 
    paginate(true); 
    $(this).html('Load more'); 
    }); 
} 

編集:問題の一部は、ターボリンクに関連している可能性があります。私がページをリフレッシュするとき、スクロールハンドラはもはやトリガしていないようです。

+0

Turbolinksはページを「」に挿入します。つまり、すべてのイベントリスナーが保持されます。 –

+0

@ChrisGは、問題がturbolinksのように聞こえます。どうすれば回避できますか?何か案は? – user4584963

答えて

2

ページを自動スクロールするときにウィンドウスクロールイベントリスナーが設定されていますが、ターボリンクの動作によってページが変更されても設定が解除されません。新しいページが読み込まれるたびにスクロールイベントを取り除くには、$(window).unbind("scroll");を試してみてください。

+0

返事をありがとう。このコードはどこに置くべきですか?私はそれを私の機能のどこかに置くことができますか?または、新しいページが読み込まれるたびにトリガーする何らかの関数に入れておく必要がありますか? – user4584963

+0

リンクがクリックされるたびにその関数が実行されるなら、 'initPagination()'関数の中に置くことができます。それ以外の場合は、新しいページが読み込まれるたびにトリガーする関数に挿入する必要があります。 – Chip

関連する問題