当滚动条滚动到页面底部自动加载增加内容的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 相关文章推荐
jQuery的实现原理的模拟代码 -3 事件处理
Aug 03 Javascript
jQuery实现密保互斥问题解决方案
Aug 16 Javascript
js获取系统的根路径实现介绍
Sep 08 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
Apr 15 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
Mar 04 Javascript
AngularJS表单和输入验证实例
Nov 02 Javascript
js自定义瀑布流布局插件
May 16 Javascript
jQuery仿移动端支付宝键盘的实现代码
Aug 15 jQuery
浅谈JS和jQuery的区别
Mar 27 jQuery
es6 filter() 数组过滤方法总结
Apr 03 Javascript
JavaScript实现与web通信的方法详解
Aug 07 Javascript
vue element-ul实现展开和收起功能的实例代码
Nov 25 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
SONY ICF-SW55的电路分析
2021/03/02 无线电
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
2014/10/01 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
2017/06/07 PHP
Laravel中错误与异常处理的用法示例
2018/09/16 PHP
php经典趣味算法实例代码
2020/01/21 PHP
jQuery拖拽 &amp; 弹出层 介绍与示例
2013/12/27 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
2014/02/08 Javascript
JavaScript+CSS无限极分类效果完整实现方法
2015/12/22 Javascript
Node.js connect ECONNREFUSED错误解决办法
2016/09/15 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
JS库中的Particles.js在vue上的运用案例分析
2017/09/13 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
详解JavaScript 异步编程
2020/07/13 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
2020/10/29 Javascript
[46:55]完美世界DOTA2联赛决赛 FTD vs Phoenix 第三场 11.08
2020/11/11 DOTA
python抽象基类用法实例分析
2015/06/04 Python
python 实现红包随机生成算法的简单实例
2017/01/04 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
python抖音表白程序源代码
2019/04/07 Python
python 字符串常用方法汇总详解
2019/09/16 Python
在django admin中配置搜索域是一个外键时的处理方法
2020/05/20 Python
详解Python3 定义一个跨越多行的字符串的多种方法
2020/09/06 Python
CSS 3.0文字悬停跳动特效代码
2020/10/26 HTML / CSS
微软香港官网及网上商店:Microsoft HK
2016/09/01 全球购物
英国知名化妆品网站:Revolution Beauty(原TAM Beauty)
2018/02/28 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
通信工程专业女生个人求职信
2013/09/21 职场文书
大学同学十年聚会感言
2014/02/21 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
Python List remove()实例用法详解
2021/08/02 Python
Java异常体系非正常停止和分类
2022/06/14 Java/Android
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
2022/06/21 Python