javascript - 如何在没有 jquery 的情况下仅使用 javascript 进行无限滚动

标签 javascript

我想用 javascript 实现无限滚动而不用 jquery。

我是 javascript 新手。

在网上搜索后,我有这段代码。

<!DOCTYPE html><html lang="en"><head><title>scrolling</title>
<style>
.page {height: 900px;border:solid 1px #ccc}
</style>
</head>
<body>

<div id="scrollcontent">

<div class="page"></div>

</div>

<script>

//########################
function getScrollXY() {
var scrOfX = 0, scrOfY = 0;
if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
}
return [ scrOfX, scrOfY ];
}

function getDocHeight() {
var D = document;
return Math.max(
    D.body.scrollHeight, D.documentElement.scrollHeight,
    D.body.offsetHeight, D.documentElement.offsetHeight,
    D.body.clientHeight, D.documentElement.clientHeight
);
}

document.addEventListener("scroll", function (event) {
if (getDocHeight() == getScrollXY()[1] + window.innerHeight) 
{ 
  var oldcontent = document.getElementById('scrollcontent');
  oldcontent.innerHTML = oldcontent.innerHTML + '<div class="page">new content loaded</div>';
  document.getElementById("scrollcontent").innerHTML=oldcontent.innerHTML;

}
});
</script>
</body>
</html>

但是,此代码仅在滚动条触及底部时有效。

我希望它在用户距离底部 100 像素时工作。 (或靠近底部)

我还需要在大多数现代浏览器、移动设备等中运行的代码。

还有,有什么办法可以改进这段代码吗?请提出建议。

代码如有错误,请指正。

谢谢

最佳答案

首先,我认为您不必再​​支持 netscape 和 ie6。因此,考虑到这一点,我创建了以下脚本

document.addEventListener("scroll", function (event) {
    checkForNewDiv();
});

var checkForNewDiv = function() {
    var lastDiv = document.querySelector("#scroll-content > div:last-child");
    var lastDivOffset = lastDiv.offsetTop + lastDiv.clientHeight;
    var pageOffset = window.pageYOffset + window.innerHeight;

    if(pageOffset > lastDivOffset - 20) {
        var newDiv = document.createElement("div");
        newDiv.innerHTML = "my awesome new div";
        document.getElementById("scroll-content").appendChild(newDiv);
        checkForNewDiv();
    }
};

另见 jsfiddle

关于javascript - 如何在没有 jquery 的情况下仅使用 javascript 进行无限滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22268079/

相关文章:

javascript - Grunt - 修改输出文件名

javascript - 使用过滤器仅返回键的特定属性

javascript - 从 JavaScript 到 Django View 的支付信息

javascript - 无法从本地主机进行跨域 REST API 调用

javascript - 这个简单的 Safari 扩展代码有什么问题?

Javascript数组到句子

javascript - 如何在复杂系统中使用TDD?

javascript - ESLint 如何修复解析错误 : 'import' and 'export' may only appear at the top level

javascript - 有没有办法在 Perl 中执行 JavaScript?

javascript - Mongo db.getCollection 不是函数