为移动设备实现换页无限滚动

时间:2018-08-17 07:47:43

标签: javascript javascript-events event-handling infinite-scroll touchmove

我的目标是创建一个移动网站,当您到达主要部分的末尾时,会看到一个“滚动更多”图标,并且如果您再次向下滚动-您仍然位于页面底部-下一节将被加载,并通过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上运行。

0 个答案:

没有答案