当滚动条滚动到页面底部自动加载增加内容的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 相关文章推荐
脚本吧 - 幻宇工作室用到js,超强推荐share.js
Dec 23 Javascript
JS.elementGetStyle(element, style)应用示例
Sep 24 Javascript
js 调用百度地图api并在地图上进行打点添加标注
May 13 Javascript
jQuery实现伸展与合拢panel的方法
Apr 30 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
Nov 25 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
Jul 06 Javascript
bootstrap fileinput实现文件上传功能
Aug 23 Javascript
Cpage.js给组件绑定事件的实现代码
Aug 31 Javascript
vue项目中v-model父子组件通信的实现详解
Dec 10 Javascript
js实现弹出框的拖拽效果实例代码详解
Apr 16 Javascript
优雅的处理vue项目异常实战记录
Jun 05 Javascript
微信小程序调用后台service教程详解
Nov 06 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
给初学者的30条PHP最佳实践(荒野无灯)
2011/08/02 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
js操作table元素实现表格行列新增、删除技巧总结
2015/11/18 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
vue构建单页面应用实战
2017/04/10 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
vue项目引入字体.ttf的方法
2018/09/28 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
2019/04/20 Javascript
Vue 中 a标签上href无法跳转的解决方式
2019/11/12 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
[01:19:33]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第一场 2月2日
2021/03/11 DOTA
Python RuntimeError: thread.__init__() not called解决方法
2015/04/28 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
python将回车作为输入内容的实例
2018/06/23 Python
python读取和保存图片5种方法对比
2018/09/12 Python
Django-Rest-Framework 权限管理源码浅析(小结)
2018/11/12 Python
python在新的图片窗口显示图片(图像)的方法
2019/07/11 Python
django rest framework 实现用户登录认证详解
2019/07/29 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
2020/04/15 Python
大学生职业生涯规划书模板
2014/01/03 职场文书
申论不会写怎么办?教您掌握这6点思维和原则
2019/07/17 职场文书
在 Golang 中实现 Cache::remember 方法详解
2021/03/30 Python
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
JS实现简单九宫格抽奖
2022/06/28 Javascript
python计算列表元素与乘积详情
2022/08/05 Python