我的目标是创建一个移动网站,当您到达主要部分的末尾时,会看到一个“滚动更多”图标,并且如果您再次向下滚动-您仍然位于页面底部-下一节将被加载,并通过AJAX请求更改页面。
这是我的scrollSection算法的代码:
function scrollSection(event) {
if (!waitingForScroll) {
waitingForScroll = true;
setTimeout(function() {waitingForScroll=false;}, 1000);
var scrollTop = Math.round($(window).scrollTop());
if (bodyHeight<documentHeight) {
sectionScrollable = true;
if (atSectionEnd) {
canChangeSection = true;
} else {
canChangeSection = false;
}
if ($('#pageContainer .scrollSectionIcon').css('display')=='none') {
$('#pageContainer .scrollSectionIcon').css('display', 'block');
}
var leftToScroll = (documentHeight-bodyHeight) - scrollTop;
if (leftToScroll<=2) {
atSectionEnd = true;
} else {
atSectionEnd = false;
}
} else {
sectionScrollable = false;
atSectionEnd = true;
canChangeSection = true;
if ($('#pageContainer .scrollSectionIcon').css('display')=='block') {
$('#pageContainer .scrollSectionIcon').css('display', 'none');
}
}
if (sectionLoaded && atSectionEnd && canChangeSection && !sectionAnimationPlaying) {
[...] switchToSectionLogic && switchToSectionAnimation
}
}
}
waitingForScroll , bodyHeight , documentHeight , sectionScrollable , atSectionEnd , atSectionEnd , canChangeSection , sectionLoaded , sectionAnimationPlaying 和 lastScrollTop 都是定期更新的全局变量在需要的时候。这些名称应该能够很好地描述其用途。
我将该函数绑定到了 touchmove 事件,并有一定的延迟时间:
var touchmoveEventTimer;
document.getElementById("pageContainer").addEventListener('touchmove', function(event) {
clearTimeout(touchmoveEventTimer);
var functionToCall = function() {scrollSection(event)};
touchmoveEventTimer = setTimeout(functionToCall, 500);
});
不幸的是,此代码无法像我一开始所描述的那样起作用。我的问题是,如果我快速滚动,就可以更改页面而无需先停在页面底部。
是否有更好的方法来实现目标?我可以正确处理JavaScript事件吗?我应该将我的功能绑定到其他东西吗?
该网站必须同时在Android和iOS上运行。