当与pjax一起使用时解绑jQuery无限滚动

时间:2012-05-28 14:23:52

标签: javascript jquery ajax pjax

我正在使用一个非常简单的jQuery无限滚动来消除编号分页的需要,但我遇到了一个小问题。

当我转到使用无限滚动并加载它的页面时,无限滚动将按计划运行,但当我使用pjax导航离开该页面时,它仍会在上运行其他网站页面,因为它仍然是一个加载的功能?

基本上告诉无限滚动功能只能在我想要的页面上运行,或者在pjax更改页面时以某种方式重置它,我该怎么办?

到目前为止,这是我的无限卷轴的代码:

$(window).on("scroll", function() {

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

        // Do scroll pagination, load content into #load-here ..
    }
}

这就是我希望滚动功能的方式:

$("a:not(.no-dynamic)").pjax("#main");

$(document).on('pjax:end',   function() {
    if($("#load-here").length == 0) {
        $(window).off("scroll");
    }
    else
        $(window).on("scroll");
});

3 个答案:

答案 0 :(得分:1)

试试这个:

而不是$(window).scroll(),请执行:

$(window).on('scroll', function() {
    // stuff
});

我从未使用过pjax,但根据docs,您可以使用end回调:

$(document)
    .on('pjax:end', function() {
        $(window).off('scroll');
    });

这个想法是每次pjax请求结束时从window取消绑定“滚动”事件。

答案 1 :(得分:1)

我有类似的问题。通过解除滚动处理程序的绑定来修复它,如果一个特定的div(隐藏的分页div)不再存在。

$(window).scroll(function()
{
    if($('#pagination').length == 0){
   $(window).unbind('scroll',<<scroll handler function>>);

        return;
}
  ......
}

答案 2 :(得分:0)

处理window.onbeforeunload取消绑定无限滚动