jQuery Infinite Scroll-当滚动速度很快时,事件会触发多次
好的,下面的代码“起作用”,当您滚动到页面底部时,将启动AJAX函数,并将结果附加到页面上的#postswraper div 问题是:如果我在到达页面底部时快速滚动,AJAX会触发几次并将几组结果加载到#postswraper div中(额外的“不想要的”结果的数量取决于快速滚动触发的额外滚动事件的数量) 最终,每次用户到达底部时,我只需要提供一组结果。我试过添加计时器之类的东西,但没有用。它显然是在DOM中存储额外的滚动动作,然后按顺序启动它们 有什么想法吗 我正在使用jquery.1.4.4.js,如果这对任何人都有帮助的话。在这种情况下,e.preventDefault()无论如何都不起作用jQuery Infinite Scroll-当滚动速度很快时,事件会触发多次,jquery,infinite-scroll,Jquery,Infinite Scroll,好的,下面的代码“起作用”,当您滚动到页面底部时,将启动AJAX函数,并将结果附加到页面上的#postswraper div 问题是:如果我在到达页面底部时快速滚动,AJAX会触发几次并将几组结果加载到#postswraper div中(额外的“不想要的”结果的数量取决于快速滚动触发的额外滚动事件的数量) 最终,每次用户到达底部时,我只需要提供一组结果。我试过添加计时器之类的东西,但没有用。它显然是在DOM中存储额外的滚动动作,然后按顺序启动它们 有什么想法吗 我正在使用jquery.1.4.4
$(window).scroll(function(e) {
e.preventDefault();
if ($(window).scrollTop() >= ($(document).height() - $(window).height())) {
$('div#loadmoreajaxloader').show();
$.ajax({
cache: false,
url: 'loadmore.php?lastid=' + $('.postitem:last').attr('id'),
success: function(html) {
if (html) {
$('#postswrapper').append(html);
$('div#loadmoreajaxloader').hide();
} else {
$('div#loadmoreajaxloader').html();
}
}
});
}
});
尝试存储某种类型的数据,以存储页面当前是否正在加载新项目。也许是这样:
$(window).data('ajaxready', true).scroll(function(e) {
if ($(window).data('ajaxready') == false) return;
if ($(window).scrollTop() >= ($(document).height() - $(window).height())) {
$('div#loadmoreajaxloader').show();
$(window).data('ajaxready', false);
$.ajax({
cache: false,
url: 'loadmore.php?lastid=' + $('.postitem:last').attr('id'),
success: function(html) {
if (html) {
$('#postswrapper').append(html);
$('div#loadmoreajaxloader').hide();
} else {
$('div#loadmoreajaxloader').html();
}
$(window).data('ajaxready', true);
}
});
}
});
在发送Ajax请求之前,会清除一个标志,表示文档还没有准备好接受更多Ajax请求。一旦Ajax成功完成,它会将标志设置回true,并且可以触发更多请求。不需要的结果是“loadmore.php”脚本会在不需要时执行多次。我只需要,每当用户到达页面底部时,运行一(1)次代码块,通过loadmore.php加载适当的结果,在用户再次到达页面底部之前,不要加载任何其他内容。是的,伙计!我之前也有类似的逻辑,但你成功了。工作起来很有魅力。干杯太棒了,谢谢!我结合了问题和答案中的代码来解决同一个问题,谢谢!这太漂亮了。你也可以使用
window.whatever=true
。太棒了!一直在为类似的问题而挣扎。