如何仅使用javascript而不使用jquery进行无限滚动

2024-04-06

我希望用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 http://jsfiddle.net/8LpFR/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何仅使用javascript而不使用jquery进行无限滚动 的相关文章

  • TypeError:req.checkBody 不是包含 bodyparser 和expressvalidator 模块的函数

    我收到错误 req checkBody 不是一个函数 我认为我已经包含了express validator和body parser 这是我的代码 var express require express var bodyParser requ
  • 我怎样才能向下滚动到多行文本框的底线,Javascript的scrollIntoView对此不起作用

    我正在尝试创建一个基本的视频和文本聊天网站 在房间页面中 我有 Flash 视频和一个文本框 多行 其中显示发送到房间的所有消息和一个文本框 供用户通过单击输入和发送旁边的按钮 tr td td tr
  • JavaScript 中的“this”如何工作?

    我知道还有其他几篇关于这个主题的帖子 但它们仍然让我感到困惑 我已经包含了 jQuery 和所有内容 我有一个简单的 javascript 类 如下例所示 function CarConstructor this speed 19 in m
  • AJAX 与 Facebook 身份验证

    我已经构建了一个完全基于 AJAX 的应用程序 它没有页面刷新并使用 AJAX 加载所有内容 现在我想以一种不会重定向用户进行页面刷新的方式嵌入 Facebook 身份验证 目前 Facebook 的工作方式如下 用户通过单击 Facebo
  • 如何在 jquery 上并排区分 mouseout/leave 事件?

    有没有办法知道鼠标事件是否已从元素的特定一侧离开 我的意思是 我有一个带有 mouseover mouseenter 事件的 DIV 并且我只想在鼠标离开到元素的左侧时触发该操作DIV 并向右 但如果它从底部或顶部离开 则不应触发任何操作
  • 将数组传递给 include() javascript

    我试图找出一个字符串是否包含存储在数组中的多个字符串 includes 所以我尝试过 let string hello james console log string includes hello james 但它被返回为false 当我
  • angular.isdefine 有什么好处?

    有什么好处angular isdefined超过和超过foo undefined 我一时想不出有什么好处 在 Javascript 中以任何方式访问真正未定义的变量 除了 typeof 都会抛出错误 你只能使用Angular isDefin
  • onchange 选择框

    假设我们有 2 个不同的选择框 具有相同数量的选项
  • 如何在 jQuery 中使用其中心作为参考点来缩小 div?

    我有以下 div div style margin left 0px height 100px width 100px background color red div 我想使用 jQueryanimate 将 div 缩小到其大小的一半
  • Vue Chart.js - 数据变化时图表不更新

    我正在使用 Vue js 和 Chart js 绘制一些图表 每次我调用该函数时generateChart 图表不会自动更新 当我在 Vue Devtools 中检查数据时 它们是正确的 但图表没有反映数据 但是 当我调整窗口大小时 图表确
  • 如何将对象传递给 onclick 事件[重复]

    这个问题在这里已经有答案了 可能的重复 Javascript 循环内的事件处理程序 需要闭包吗 https stackoverflow com questions 341723 event handlers inside a javascr
  • jsx转js后dom未定义错误

    我创建了一个 jsx 文件 如下所示 jsx dom function use strict define jquery react react dom function React ReactDOM var AppView React c
  • vue中有自动更新这段代码的东西吗?

    我在导航器中找到了这个按钮 当用户登录时会显示该按钮 而当用户注销时该按钮就会消失 但现在我需要在按钮删除 出现之前刷新页面 这是我的代码 Button div div class div div
  • 根据用户投票移动 div

    我是新来的 但我喜欢这个网站 我检查了其他类似的问题 但没有看到我要找的东西 我是一名音乐家 有一段时间我一直在做 每日之歌 每天写一首小歌 我想将歌曲发布为 div 在里面 li 在 div 中 我只想要一个简单的 mp3 播放器和一个
  • 如何以编程方式移动 OpenLayers Vector?

    API 文档为OpenLayers Feature Vector http dev openlayers org apidocs files OpenLayers Feature Vector js html说 Vector 本身根本没有方
  • 不透明的回复有哪些限制?

    不透明的回应 https fetch spec whatwg org concept filtered response opaque被定义为一部分获取API https fetch spec whatwg org 并表示向远程源发出请求的
  • 展平数组中的对象

    大家好 我从响应中获取了一系列对象 我需要将所有学生对象展平为简单的学生姓名 但不确定如何进行 任何帮助将不胜感激 数组示例 students id 123456 name Student Name active true students
  • 如何在禁用按钮上启用 Bootstrap 工具提示?

    我需要在禁用的按钮上显示工具提示 并在启用的按钮上删除它 目前 它的工作原理是相反的 扭转这种行为的最佳方法是什么 rel tooltip tooltip
  • JS 中的展开/休息运算符如何工作? [复制]

    这个问题在这里已经有答案了 我正在努力完全理解扩展 休息运算符在 JS 中的工作原理 我已经阅读了 MDN 文档 但我仍然不完全清楚 我在下面提供了一个示例 我在其中使用了它并且它按预期工作 const users name Samir a
  • Javascript - 从 AWS s3 存储桶读取镶木地板数据(使用快速压缩)

    In nodeJS 我正在尝试读取镶木地板文件 压缩 snappy 但没有成功 I used https github com ironSource parquetjs https github com ironSource parquet

随机推荐