Сброс / отключение бесконечной прокрутки после вызова AJAX


Я использую infinite-ajax-scroll (https://github.com/webcreate/infinite-ajax-scroll ) плагин с фильтрацией. У меня есть фильтры, работающие с бесконечной прокруткой, но моя проблема заключается в том, что всякий раз, когда прокрутка получает конец результатов для одного фильтра, он больше не будет прокручиваться, даже после выбора другого фильтра. Поэтому мне нужно сбросить прокрутку infinate, когда фильтр выбран, но я не могу найти нигде в документации о том, как это сбросить, и не очень хорошо с этим справляюсь. JQuery и так не может этого понять.

У меня также есть определенные фильтры, которые не нуждаются в inifiniate scroll и также нуждаются в способе отключить его для тех, кто.

$('.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
});
3 4

3 ответа:

Другиеимели ту же проблему, что и Вы ; по словам автора, в настоящее время невозможно полностью повторно инициализировать IAS.

Таким образом, ваши варианты, кажется,

1) жесткий сброс плагина путем удаления обработчиков событий и повторного вызова jQuery.ias({...}) при каждом изменении фильтра

2) переключитесь на другую библиотеку. Пользователь в этом отчете об ошибке написал свой собственный - возможно, его решение вам пригодится

Как сказал янфо, нет ничего, чтобы повторно инициализировать плагин должным образом. Вы должны отвязать прокрутку от окна и снова вызвать 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();

Поэтому вам придется вызывать initscroll при загрузке и при фильтрации.

Начиная с версии 2 Infinite Ajax Scroll существует новый метод, предназначенный для решения такого рода проблем. Вызывая новый метод destroy () под псевдонимом unbind(), вы удаляете 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