当滚动条滚动到页面底部自动加载增加内容的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实现下载远程文件并保存在本地的脚本
May 06 Javascript
js操作Xml(向服务器发送Xml,处理服务器返回的Xml)(IE下有效)
Jan 30 Javascript
一个简单的javascript类定义例子
Sep 12 Javascript
javascript使用window.open提示“已经计划系统关机”的原因
Aug 15 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
Dec 16 Javascript
全面解析Bootstrap中tooltip、popover的使用方法
Jun 13 Javascript
vue双向绑定简要分析
Mar 23 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
Apr 07 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
Jul 24 Javascript
简单实现jquery隔行变色
Nov 09 jQuery
IE8中jQuery.load()加载页面不显示的原因
Nov 15 jQuery
jstree中的checkbox默认选中和隐藏示例代码
Dec 29 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中执行系统外部命令
2006/10/09 PHP
PHP操作MongoDB GridFS 存储文件的详解
2013/06/20 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
2015/11/25 PHP
YII框架中使用memcache的方法详解
2017/08/02 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
jQuery过滤选择器详解
2015/01/13 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
使用Web Uploader实现多文件上传
2016/06/08 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
web打印小结
2017/01/11 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
js实现旋转木马效果
2017/03/17 Javascript
js实现适配不同的屏幕大小
2017/04/10 Javascript
深入探究node之Transform
2017/07/20 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
安装vue-cli的简易过程
2018/05/22 Javascript
html2canvas属性和使用方法以及如何使用html2canvas将HTML内容写入Canvas生成图片
2020/01/12 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
基于ant design日期控件使用_仅月份的操作
2020/10/27 Javascript
[54:33]2018DOTA2亚洲邀请赛小组赛 A组加赛 Liquid vs Optic
2018/04/03 DOTA
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
python实现rest请求api示例
2014/04/22 Python
Python zip()函数用法实例分析
2018/03/17 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
Python3从零开始搭建一个语音对话机器人的实现
2019/08/23 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
师范应届毕业生自荐信
2013/11/18 职场文书
安全责任书模板
2014/07/22 职场文书
中学生的1000字检讨书
2014/10/11 职场文书
餐厅服务员岗位职责
2015/02/09 职场文书
教师节获奖感言
2015/07/31 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书
Python中的min及返回最小值索引的操作
2021/05/10 Python