当滚动条滚动到页面底部自动加载增加内容的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 相关文章推荐
通过继承IHttpHandle实现JS插件的组织与管理
Jul 13 Javascript
jquery实现的网页自动播放声音
Apr 30 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
Mar 05 Javascript
ajax接收后台数据在html页面显示
Feb 19 Javascript
详解webpack4多入口、多页面项目构建案例
May 25 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
Jul 31 Javascript
微信小程序使用wxParse解析html的实现示例
Aug 30 Javascript
vue init webpack 建vue项目报错的解决方法
Sep 29 Javascript
小程序实现层叠卡片滑动效果
Aug 26 Javascript
javascript+css实现进度条效果
Mar 25 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
Apr 26 Javascript
JavaScript中10个Reduce常用场景技巧
Jun 21 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网页游戏学习之Xnova(ogame)源码解读(十四)
2014/06/26 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
2018/05/23 PHP
php用户名的密码加密更安全的方法
2019/06/21 PHP
PHP7 其他修改
2021/03/09 PHP
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
2013/01/11 Javascript
js分页代码分享
2014/04/28 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
微信小程序 教程之wxapp视图容器 swiper
2016/10/19 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
微信小程序中显示html格式内容的方法
2017/04/25 Javascript
angularJS开发注意事项
2018/05/26 Javascript
解决angularjs service中依赖注入$scope报错的问题
2018/10/02 Javascript
150行Node.js实现的dns代理工具
2019/08/02 Javascript
如何使用RoughViz可视化Vue.js中的草绘图表
2021/01/30 Vue.js
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
使用Python编写vim插件的简单示例
2015/04/17 Python
Python批量转换文件编码格式
2015/05/17 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
Python自定义函数定义,参数,调用代码解析
2017/12/27 Python
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
PyTorch中常用的激活函数的方法示例
2019/08/20 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
Python单链表原理与实现方法详解
2020/02/22 Python
python 实现批量图片识别并翻译
2020/11/02 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
Python 用__new__方法实现单例的操作
2020/12/11 Python
java关于string最常出现的面试题整理
2021/01/18 Python
我的网上商城创业计划书
2013/12/26 职场文书
业务副厂长岗位职责
2014/01/03 职场文书
诚实守信道德模范事迹材料
2014/08/15 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
公司总经理岗位职责
2015/04/01 职场文书