滚动到页面底部自动加载内容
上网时经常会看到许多酷炫的网页,其中给我印象较深刻的是鼠标滚动到页面底部时会自动加载内容,一直都很好奇是怎么样做到的,于是自己也尝试着写了一下。
先上个完整代码吧:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="js/jquery.min.js"></script> <style> div{ width:900px; height:800px; } li{ list-style-type:none; } </style> </head> <body id="container"> <div>lfjakjflkf</div> <script> //获取滚动条当前的位置 function getscrolltop() { var scrolltop = 0; if (document.documentElement && document.documentElement.scrollTop) { scrolltop = document.documentElement.scrollTop; } else if (document.body) { scrolltop = document.body.scrollTop; } return scrolltop; } //获取当前可视范围的高度 function getclientheight() { var clientheight = 0; if (document.body.clientHeight && document.documentElement.clientHeight) { clientheight = Math.min(document.body.clientHeight, document.documentElement.clientHeight); } else { clientheight = Math.max(document.body.clientHeight, document.documentElement.clientHeight); } return clientheight; } //获取文档完整的高度 function getscrollheight() { return Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); } window.onscroll = function () { if(getscrolltop() + getclientheight() == getscrollheight()) { var xhr; if(window.XMLHttpRequest){ xhr = new XMLHttpRequest(); }else{ xhr = new ActiveXObject("Microsoft.XMLHTTP") }; xhr.open("get","load.json",true); xhr.onreadystatechange = function(){ if(xhr.readyState == 4&& xhr.status==200){ var txt = xhr.responseText; var str = ""; // 由于获取到的是json字符串,因此必须现将其转换为json对象。 $.each(JSON.parse(txt),function(key,value){ str += "<li>"+'姓名:'+value[0].name+'。年龄为:'+value[0].age+'。性别为:'+value[0].sex+"</li>"+"<br/>"+"<br/>"; $("body").append(str) }) } } xhr.send(); } } </script> </body> </html>
load.json文件的代码如下:
{"person":[ {"name":"tom","age":"25","sex":"男"} ]}
好了,下面来分析下这段代码,其实先是页面加载完毕会有一部分内容,然后滑动滚动条,一直到文档可视区域高度+滚动条距离文档顶部高度 等于 文档总高度时 异步加载一个json文件的内容。
这里有几个要点:1、获取文档的完整高度。2、获取文档可视区域高度。3、获取滚动条距离文档顶部的高度。4、判断滚动条是否滑动到页面底部,如到了底部则异步加载json文件。5、需要将异步加载的json文件渲染到页面中,由于获取到的是json字符串,因此需要使用JSON.parse()方法先将其转换为json对象,才可以使用$.each()方法进行遍历,然后逐个获取数据。
其实我这里获取文档高度、可视区域高度以及滚动条距离文档顶部高度使用js写的,相对要复杂点,如果用jQuery写的话,会是很简洁的,如
获取文档完整高度,可以使用$(document).height();
获取文档可视区域高度,可以使用$(window).height();
获取滚动条距离文档顶部的高度,可以使用$(window).scrollTop()。
作者:江峰★
出处:http://www.cnblogs.com/jf-67/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利
分类:
javascript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?