Сброс / отключение бесконечной прокрутки после вызова 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 ответа:
Другиеимели ту же проблему, что и Вы ; по словам автора, в настоящее время невозможно полностью повторно инициализировать 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