当滚动条滚动到页面底部自动加载增加内容的js代码


Posted in Javascript onMay 13, 2014

1,注册页面滚动事件,window.onscroll = function(){ };

2,相关获取页面高度、滚动条位置、文档高度的函数:

//获取滚动条当前的位置 
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); 
}

3,在html页面底部增加代码:
<script> 
window.onscroll = function () { 
if (getScrollTop() + getClientHeight() == getScrollHeight()) { 
alert("到达底部"); 
} 
} 
</script>

这样当滚动条到达页面底部时就会触发alert("到达底部")。下面要做的就是将触发的功能改为ajax调用,往页面中动态增加内容。

4,动态增加页面元素的示例代码:

var newnode = document.createElement("a"); 
newnode.setAttribute("href", "#"); 
newnode.innerHTML = "new item"; 
document.body.appendChild(newnode); 
var newline = document.createElement("br"); 
document.body.appendChild(newline);

将这段代码替换掉alert("到达底部");,就可以看到,当滚动条滚动到底部时,页面底部就会增加一行”new item“,不同往下滚动,不停增加,无止尽。

5,将示例代码修改为ajax相关代码:

<script> 
window.onscroll = function () { 
if (getScrollTop() + getClientHeight() == getScrollHeight()) { 
var xmlHttpReq = null; 
//IE浏览器使用ActiveX 
if (window.ActiveXObject) { 
xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP"); 
} 
//其它浏览器使用window的子对象XMLHttpRequest 
else if (window.XMLHttpRequest) { 
xmlHttpReq = new XMLHttpRequest(); 
} if (xmlHttpReq != null) { 
//设置请求(没有真正打开),true:表示异步 
xmlHttpReq.open("GET", "/ajaxtest", true); 
//设置回调,当请求的状态发生变化时,就会被调用,传递参数xmlHttpReq 
xmlHttpReq.onreadystatechange = function () { onajaxtest(xmlHttpReq); }; 
//提交请求 
xmlHttpReq.send(null); 
} 
} 
} 
function onajaxtest(req) { 
var newnode = document.createElement("a"); 
newnode.setAttribute("href", "#"); 
newnode.innerHTML = req.readyState + " " + req.status + " " + req.responseText; 
document.body.appendChild(newnode); 
var newline = document.createElement("br"); 
document.body.appendChild(newline); 
} 
</script>

当滚动条到页面底部之后,就会增加以下节点,如下:

2 200
3 200 ajax ok
4 200 ajax ok

这里2、3、4,就是请求的状态readyState,200就是http的回应状态status,ajax ok是/ajaxtext应用返回的文本,具体查看以下参考资料。

按照XMLHttpRequest的的文档说明,应该能够打印出:

0 200

1 200

2 200

3 200 ajax ok

4 200 ajax ok

但是我这里没有打印出0和1这两个状态,这是为什么呢,路过的高手方便吱一声吗?

Javascript 相关文章推荐
动态调用CSS文件的JS代码
Jul 29 Javascript
JS+CSS实现一个气泡提示框
Aug 18 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
Apr 30 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
Jul 22 Javascript
js实现仿京东2级菜单效果(带延时功能)
Aug 27 Javascript
详解vue与后端数据交互(ajax):vue-resource
Mar 16 Javascript
vue.js开发环境安装教程
Mar 17 Javascript
vue中使用input[type=&quot;file&quot;]实现文件上传功能
Sep 10 Javascript
小程序实现留言板
Nov 02 Javascript
深入理解Vue keep-alive及实践总结
Aug 21 Javascript
vue 组件基础知识总结
Jan 26 Vue.js
微信小程序input抖动问题的修复方法
Mar 03 Javascript
js语法学习之判断一个对象是否为数组
May 13 #Javascript
js中定义一个变量并判断其是否为空的方法
May 13 #Javascript
jQuery 计算iframe 窗口大小的方法
May 13 #Javascript
js 调用百度地图api并在地图上进行打点添加标注
May 13 #Javascript
两种不同的方法实现js对checkbox进行全选和反选
May 13 #Javascript
js浏览器本地存储store.js介绍及应用
May 13 #Javascript
js 获取时间间隔实现代码
May 12 #Javascript
You might like
PHP数组排序函数合集 以及它们之间的联系分析
2013/06/27 PHP
PHP中的session安全吗?
2016/01/22 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
YII2框架使用控制台命令的方法分析
2020/03/18 PHP
JavaScript 中的日期和时间及表示标准介绍
2013/08/21 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
2016/08/11 Javascript
Angular4学习笔记之实现绑定和分包
2017/08/01 Javascript
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
2018/04/08 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
[51:53]完美世界DOTA2联赛决赛日 Inki vs LBZS 第二场 11.08
2020/11/10 DOTA
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
深入理解Python中字典的键的使用
2015/08/19 Python
Python构造自定义方法来美化字典结构输出的示例
2016/06/16 Python
一张图带我们入门Python基础教程
2017/02/05 Python
Tensorflow简单验证码识别应用
2017/05/25 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
django 自定义过滤器的实现
2019/02/26 Python
如何在sublime编辑器中安装python
2020/05/20 Python
北大研究生linux应用求职信
2013/10/29 职场文书
大一新生军训时的自我评价分享
2013/12/05 职场文书
高三历史教学反思
2014/01/09 职场文书
制药工程专业职业生涯规划范文
2014/03/10 职场文书
活动总结书
2014/05/08 职场文书
大学毕业生求职自荐书
2014/06/05 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
python获取淘宝服务器时间的代码示例
2021/04/22 Python
Django rest framework如何自定义用户表
2021/06/09 Python
Ubuntu Server 安装Tomcat并配置systemctl
2022/04/28 Servers
python可视化分析绘制带趋势线的散点图和边缘直方图
2022/06/25 Python