我使用ajax从Web服务动态加载XML,返回的记录仅限于25个项目,每个网址加载'或者“打电话”....解决这个问题我有一个过程,用户向下滚动页面,当它们达到页面高度的90%时(或当它们到达页面底部时 - 不确定哪个我和#39;我将选择),名为startindexnum的变量增加25。
所以startindexnum从25开始...然后在第一次'#s; fire'该函数,startindexnum变为50,在3日变为75,等等。
我的问题是它会多次触发并且有些不稳定 - 当我滚动到底部并且有时增加超过25次时处理多次(毫无疑问是我认为多次运行的结果)。
任何人都知道我需要调整什么才能正确生成增量startindex变量以附加到我的ajax URL,我在哪里检索XML?感谢。
var scrollcount = 1;
var startindexnum = 25;
var processing;
$(document).ready(function(){
$(document).scroll(function(e){
if (processing)
return false;
window.onscroll = function(ev) {
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight){
//if ($(window).scrollTop() >= ($(document).height() - $(window).height())*0.9){
// you're at x% of the page
processing = true;
scrollcount = scrollcount + 1;
startindexnum = scrollcount * startindexnum;
console.log(scrollcount);
docall();
processing = false;
};
};
});
});
答案 0 :(得分:1)
问题是我打赌docall()
是异步调用,因此在该调用之后将processing
设置为false
不会阻止将来的滚动事件。
在返回结果之前发生false设置。当processing
完成任务时,您希望将docall()
设置为false。
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight){
//if ($(window).scrollTop() >= ($(document).height() - $(window).height())*0.9){
// you're at x% of the page
processing = true;
scrollcount = scrollcount + 1;
startindexnum = scrollcount * startindexnum;
console.log(scrollcount);
docall();
//processing = false; <--get rid of this
};
和
function docall(){
//When you are done fetching the new data and update the page set
function AjaxCallIsDone() {
processing = false;
}
}
答案 1 :(得分:0)
除了epascarello的帖子......
您不需要每次执行文档滚动处理程序时附加的$(document).scroll(fn)和window.onscroll。一些事情:
1)首先,看看John Resig的这篇卷轴文章。 Scrolling by J.Resig
2)如果你想要jquery方法,那么使用window而不是document $(window).scroll(fn)。
3)如果没有,那么我认为以下内容适合您:
var scrollcount = 1;
var startindexnum = 25;
var processing;
$(document).ready(function(){
window.onscroll = function(ev) {
if (!processing) {
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight){
processing = true;
scrollcount = scrollcount + 1;
startindexnum = scrollcount * startindexnum;
console.log(scrollcount);
docall();
}
}
}
});