当滚动条滚动到页面底部自动加载增加内容的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实现连连看游戏(附源码)
Nov 05 Javascript
js使用ajax读博客rss示例
May 06 Javascript
js获取IP地址的方法小结
Jul 01 Javascript
javascript运动详解
Jul 06 Javascript
JavaScript中的时间处理小结
Feb 24 Javascript
jQuery实现两列等高并自适应高度
Dec 22 Javascript
JS动态生成年份和月份实例代码
Feb 04 Javascript
vue组件内部引入外部js文件的方法
Jan 18 Javascript
vue实现的封装全局filter并统一管理操作示例
Feb 02 Javascript
Vue 封装防刷新考试倒计时组件的实现
Jun 05 Javascript
解决vue bus.$emit触发第一次$on监听不到问题
Jul 28 Javascript
vue-cli中实现响应式布局的方法
Mar 02 Vue.js
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 ob_start()控制浏览器cache、生成html实现代码
2010/02/16 PHP
精美漂亮的php分页类代码
2013/04/02 PHP
PHP将两个关联数组合并函数提高函数效率
2014/03/18 PHP
Laravel框架源码解析之反射的使用详解
2020/05/14 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
2020/11/22 PHP
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
JQuery解析HTML、JSON和XML实例详解
2014/03/29 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
2015/11/03 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
js 两个日期比较相差多少天的实例
2017/10/19 Javascript
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
vue的过滤器filter实例详解
2018/09/17 Javascript
javascript中join方法实例讲解
2019/02/21 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
Python程序员面试题 你必须提前准备!
2018/01/16 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
Python装饰器原理与基本用法分析
2020/01/07 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
用CSS3实现瀑布流布局的示例代码
2017/11/10 HTML / CSS
HTML5语音识别标签写法附图
2013/11/18 HTML / CSS
这段代码难道不该打印出56吗
2013/02/27 面试题
品学兼优的大学生自我评价
2013/09/20 职场文书
致200米运动员广播稿
2014/02/06 职场文书
市级绿色学校申报材料
2014/08/25 职场文书
放飞梦想演讲稿200字
2014/08/26 职场文书
低碳环保演讲稿
2014/08/28 职场文书
2014年政协工作总结
2014/12/09 职场文书
教代会开幕词
2015/01/28 职场文书
公司开除员工通知
2015/04/22 职场文书
致三级跳运动员加油稿
2015/07/21 职场文书
运动会5000米加油稿
2015/07/21 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书
php实现自动生成验证码的实例讲解
2021/11/17 PHP