отвязать бесконечную прокрутку jQuery при использовании вместе с 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");
});

person Dan    schedule 28.05.2012    source источник


Ответы (3)


У меня была аналогичная проблема. Исправил это, отвязав обработчик прокрутки, если определенный div (скрытый div pagination) больше не существует.

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

        return;
}
  ......
}
person Samba    schedule 28.05.2012
comment
Как вы включаете прокрутку обратно? для меня, как только он отвязан, он снова не работает, пока не обновится? - person Dan; 29.05.2012
comment
- Напишите функцию - scrollHandler. - Привяжите функцию прокрутки к прокрутке окна, когда $('#pagination') div существует, и отмените привязку, когда он больше не существует. (с помощью jquery ajax это можно сделать в обработчике событий ajaxComplete. - person Samba; 31.05.2012

Попробуй это:

Вместо $(window).scroll() сделайте:

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

Я никогда не использовал pjax, но, согласно документам, есть end обратный вызов, который вы можете использовать:

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

Идея состоит в том, чтобы отвязать событие "прокрутки" от window каждый раз, когда заканчивается запрос pjax.

person Ayman Safadi    schedule 28.05.2012
comment
А, понятно, я раньше не пользовался .off(), похоже, это то, что мне нужно. - person Dan; 28.05.2012
comment
Это работает, отключая прокрутку, но затем прокрутка вообще не работает на следующей странице, даже с $(window).on('scroll', function() { }); ? - person Dan; 28.05.2012

обработайте window.onbeforeunload, чтобы отменить привязку бесконечной прокрутки

person rt2800    schedule 28.05.2012
comment
Я не думаю, что onbeforeunload запускается с помощью pjax. Хотя может ошибся... - person Ayman Safadi; 28.05.2012