当滚动条滚动到页面底部自动加载增加内容的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 相关文章推荐
javascript json 新手入门文档
Dec 03 Javascript
jquery中prop()方法和attr()方法的区别浅析
Sep 06 Javascript
做好七件事帮你提升jQuery的性能
Feb 06 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
Apr 29 Javascript
你不知道的高性能JAVASCRIPT
Jan 18 Javascript
浅析在javascript中创建对象的各种模式
May 06 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
Nov 07 Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
Mar 22 Javascript
js针对图片加载失败的处理方法分析
Aug 24 Javascript
JavaScrip如果基于url实现图片下载
Jul 03 Javascript
vue 防止页面加载时看到花括号的解决操作
Nov 09 Javascript
如何用threejs实现实时多边形折射
May 07 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实现图片添加描边字和马赛克的方法
2014/12/10 PHP
laravel 出现command not found问题的解决方案
2019/10/23 PHP
Yii框架组件的事件机制原理与用法分析
2020/04/07 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
页面版文本框智能提示JS代码
2009/11/20 Javascript
深入理解JavaScript系列(48):对象创建模式(下篇)
2015/03/04 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
2015/03/20 Javascript
原生javascript移动端滑动banner效果
2017/03/10 Javascript
JS+jQuery实现注册信息的验证功能
2017/09/26 jQuery
Vue项目组件化工程开发实践方案
2018/01/09 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
JS左右无缝轮播功能完整实例
2019/05/16 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
python实现字符串和日期相互转换的方法
2015/05/13 Python
Python标准库sched模块使用指南
2017/07/06 Python
Python实现字符串反转的常用方法分析【4种方法】
2017/09/30 Python
Python3 伪装浏览器的方法示例
2017/11/23 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
Python随机数函数代码实例解析
2020/02/09 Python
Python+OpenCV检测灯光亮点的实现方法
2020/11/02 Python
html+css3实现的登录界面
2020/12/09 HTML / CSS
html5 利用canvas手写签名并保存的实现方法
2018/07/12 HTML / CSS
欧克利英国官网:Oakley英国
2019/08/24 全球购物
英国设计师泳装、沙滩装和比基尼在线精品店:Beach Cafe
2019/08/28 全球购物
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
static全局变量与普通的全局变量有什么区别
2014/05/27 面试题
自荐信范文
2013/12/10 职场文书
群众路线教育实践活动方案
2014/02/02 职场文书
银行办公室岗位职责
2014/03/10 职场文书
货车司机岗位职责
2014/03/18 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
2014年信用社工作总结
2014/11/25 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL
一次SQL如何查重及去重的实战记录
2022/03/13 MySQL