我们有一个正在运行jQuery Infinite Scroll Plugin的网站。该插件不再维护,但它是唯一真正符合我们目的的插件。但是,我遇到的问题是我们的网站是基于ajax的。在页面更改时,对窗口触发pg-changed
触发器,这允许我们检查无限滚动容器是否存在并启用无限滚动。如果无限滚动容器不存在但$.infscr
存在,我们将尝试销毁先前的实例。
我遇到的问题是,当更改到另一个页面时,它似乎没有被正确销毁,有时会进行AJAX调用,同时显示infscr加载栏。这是我用来实例化和销毁插件的代码:
$(window).on('pg-changed', function () {
// delete our infinite scroll
if(typeof $.infscr !== 'undefined') {
$('.snap-inner, .infscr').data('infinitescroll', null);
$('.snap-inner, .infscr').infinitescroll('unbind');
$('.snap-inner, .infscr').infinitescroll('destroy');
$('#infscr-loading').remove();
$.infscr.data('infinitescroll', null);
$.infscr.infinitescroll('unbind');
$.infscr.infinitescroll('destroy');
delete $.infscr;
}
// setup our infinite scroll
if($('.infscr').length) {
$.infscr = $('.infscr').infinitescroll({
// define our navigation selectors
navSelector : 'div.infscr-navigation',
nextSelector : 'div.infscr-navigation A:first',
itemSelector : '.infscr-item',
// allow scrolling an overflowed element
behavior : 'local',
bufferPx : 120,
binder : $('.snap-inner'),
dataType : 'html',
loading : {
msg : null,
selector : '.snap-content',
img : 'data:image/gif;base64,TRIMMED',
msgText : '<span class="infscr-loading">Loading...</span>',
}
}, function (arrayOfNewElems) {
// render background images on our new elements
$(this).renderBgImages();
});
}
});
我真的希望你可以帮忙解决这个问题,因为它现在已成为一个很大的问题,在滚动时触发,进行AJAX调用并显示加载栏。
答案 0 :(得分:0)
我想问题可能是插件绑定了自身外部元素的事件。没有进一步的调试很难说(插件被删除了还是没有这样做?)。如果确实如此,为什么它不能解开事件?等
当你说'在另一页上'时,我想你没有加载一个全新的页面(这会'重置'javascript。
虽然这取决于你可能会对你有用,你可能想尝试解除文件上的所有事件,然后重新开始。
$(document).add('*').off();
应该这样做。如果是这样,您可以尝试确定手动取消绑定所需的元素/事件。让我知道这是否有效。