当滚动条滚动到页面底部自动加载增加内容的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跨页面保存变量做菜单的方法
Jan 17 Javascript
JavaScript通过RegExp实现客户端验证处理程序
May 07 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
Jan 28 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
Apr 22 Javascript
JavaScript获得url查询参数的方法
Jul 02 Javascript
javascript单例模式的简单实现方法
Jul 25 Javascript
vue.js学习笔记之绑定style样式和class列表
Oct 31 Javascript
jQuery+HTML5实现弹出创意搜索框层
Dec 29 Javascript
jQuery 禁止表单用户名、密码自动填充功能
Oct 30 jQuery
JavaScript中的&quot;=、==、===&quot;区别讲解
Jan 22 Javascript
微信小程序下拉框搜索功能的实现方法
Jul 31 Javascript
微信小程序反编译的实现
Dec 10 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
ThinkPHP 连接Oracle数据库的详细教程[全]
2012/07/16 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
2013/01/29 PHP
PHP zip扩展Linux下安装过程分享
2014/05/05 PHP
PHP __call()方法实现委托示例
2019/05/20 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
jQuery源码解读之addClass()方法分析
2015/02/20 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
2016/02/26 Javascript
js数组常用最重要的方法
2018/02/04 Javascript
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
微信小程序设置滚动条过程详解
2019/07/25 Javascript
[02:19]DOTA选手解说齐贺岁
2018/02/11 DOTA
Python open()文件处理使用介绍
2014/11/30 Python
分享Pycharm中一些不为人知的技巧
2018/04/03 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
Python子类继承父类构造函数详解
2019/02/19 Python
Python turtle绘画象棋棋盘
2019/08/21 Python
解决numpy矩阵相减出现的负值自动转正值的问题
2020/06/03 Python
Python实现加密接口测试方法步骤详解
2020/06/05 Python
python 实现汉诺塔游戏
2020/11/28 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
女娲补天教学反思
2014/02/05 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
四风问题查摆剖析材料
2014/10/11 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
拾金不昧表扬稿大全
2015/05/05 职场文书
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python
Nginx进程管理和重载原理详解
2021/04/22 Servers
解决Redis启动警告问题
2022/02/24 Redis
联想win10摄像头打不开怎么办?win10笔记本摄像头打不开解决办法
2022/04/08 数码科技