Firefox有个自动翻页的插件AutoPager,使用起来非常的方便。腾讯微博也有相同的功能,当鼠标滑动到底部时会自动展开下一页,如下图所示:
![](https://box.kancloud.cn/2016-08-02_57a05bce0d04a.gif)
展开后如下所示:
![](https://box.kancloud.cn/2016-08-02_57a05bce273e3.gif)
这个功能虽然比较小,但是实现起来是非常有意思的事情,我们可以选择多种方法达到目的。下面我介绍一种简单的实现方式。
1、首先移动滚动条会触发window.onscroll事件。
2、我们可以根据滚动条滚动时屏幕位置和页面底部的距离来判断是否需要翻页。
需要用到三个函数:
1、pageHeight:页面总高度。
2、windowHeight:屏幕高度。
3、ScollY:页面滚动的高度。
pageHeight减去windowHeight减去ScollY即为当前屏幕底部到页面底部的距离,如下图所示:
![](https://box.kancloud.cn/2016-08-02_57a05bce46fe9.gif)
下面我们可以来实现这个功能了,我们设置一个阈值来设定页面加载的次数。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/> </head> <body> <ul id="ul-list"></ul><mce:script type="text/javascript"><!--var UI = { pageHeight: function() { return document.body.scrollHeight || document.documentElement.scrollHeight }, windowHeight: function () { var a = document.documentElement; return self.innerHeight || a && a.clientHeight || document.body.clientHeight }, scrollY: function (a) { var b = document.documentElement; if (a) { var c = a.parentNode, e = a.scrollTop || 0; if (a == b) e = UI.scrollY(); return c ? e + UI.scrollY(c) : e } return self.pageYOffset || b && b.scrollTop || document.body.scrollTop }};var Utils = { randomChar: function(l) { var x = "0123456789qwertyuioplkjhgfdsazxcvbnm"; var tmp = ""; for(var i=0; i < l; i++) { tmp += x.charAt(Math.ceil(Math.random() * 100000000) % x.length); } return tmp; }};var ul = document.getElementById('ul-list');for(var i = 0; i < 50; i++) { var li = document.createElement("li"); li.innerHTML = 'hfahe'; ul.appendChild(li);}var scoll_time = 0;window.onscroll = function() { if(scoll_time < 10 & UI.pageHeight() - UI.scrollY() - UI.windowHeight() < 60) { var ul_list = document.getElementById('ul-list'); var new_li = document.createElement('li'); new_li.innerHTML = Utils.randomChar(5); ul_list.appendChild(new_li); scoll_time++; }}// --></mce:script></body> </html>
这样,我们就实现了AutoPager的功能。
剩下一个很有意思的问题,window.onscroll按照道理会在滚动条的每次移动时触发,那么在我们设定触发的高度内(例子里是60个像素),它会不会频繁的调用我们的方法呢?例如像腾讯微博一样的Ajax调用会不会多次出现呢?又该如何解决此问题呢?读者有空的话可以思考思考。
- 前言
- AutoPager的简单实现
- 利用CSS3特性巧妙实现漂亮的DIV箭头
- IE9在Win7下任务栏新特性简介
- 浏览器九宫格的简单实现
- Raphael js库简介
- 使用CSS3构建Ajax加载动画
- 用CSS3创建动画价格表
- 用CSS3实现浏览器的缩放功能
- 用纯CSS3实现QQ LOGO
- 用CSS3创建旋转载入器
- 使用Javascript开发移动应用程序
- 用HTML5创建超酷图像灰度渐变效果
- 使用CSS3创建文字颜色渐变(CSS3 Text Gradient)
- 仅用CSS创建立体旋转幻灯片
- 如何创建跨浏览器的HTML5表单
- 用CSS3实现动画进度条
- HTML5 Guitar Tab Player
- 奇妙的HTML5 Canvas动画实例
- 谈HTML5和CSS3的国际化支持
- 实现跨浏览器的HTML5占位符
- 前端开发必备工具:WhatFont Bookmarklet-方便的查询网页上的字体
- 使用HTML5和CSS3来创建幻灯片
- HTML5之美
- 如何使用HTML5创建在线精美简历
- 以小见大、由浅入深-谈如何面试Javascript工程师
- 快速入门:HTML5强大的Details元素
- 用CSS3实现图像风格
- HTML5视频字幕与WebVTT
- 用纯CSS3实现Path华丽动画
- 用3个步骤实现响应式网页设计
- 遇见CSS3滤镜
- 关于CSS3滤镜的碎念
- 用纯CSS3绘制萌系漫画人物动态头像
- CSS3新的鼠标样式介绍
- 用HTML5献上爱的3D玫瑰
- 对HTML5 Device API相关规范的解惑
- 如何使用HTML5实现拍照上传应用
- 2012第一季度国外HTML5移动开发趋势
- HTML5新特性:范围样式
- 百度开发者大会-《用HTML5新特性开发移动App》PPT分享
- Chrome 19对于HTML5最新支持的动态:电池状态API,全屏API,震动API,语音API
- 遇见Javascript类型数组(Typed Array)
- 用HTML5 Audio API开发游戏音乐
- 用HTML5实现人脸识别
- 用Javascript实现人脸美容
- Chrome 20对于HTML5最新支持的动态:颜色输入,网络信息API,CSS着色器
- 用HTML5实现手机摇一摇的功能
- 用HTML5实现iPad应用无限平滑滚动
- 用非响应式设计构建跨端Web App
- 了解SVG
- HTML5图像适配介绍
- HTML5安全:内容安全策略(CSP)简介
- HTML5安全:CORS(跨域资源共享)简介
- 用CSS3 Region和3D变换实现书籍翻页效果
- 谈谈移动App的思维误区
- Chrome新特性:文件夹拖拽支持
- 《关注HTML5安全》
- HTML5安全风险详析之一:CORS攻击
- HTML5安全风险详析之二:Web Storage攻击
- HTML5图像适配最新进展:响应式图片规范草案
- HTML5移动Web App相关标准状态及路线图
- HTML5安全风险详析之三:WebSQL攻击
- Chrome引入WebRTC支持视频聊天App
- HTML5安全风险详析之四:Web Worker攻击
- HTML5安全风险详析之五:劫持攻击
- HTML5安全风险详析之六:API攻击
- HTML5安全攻防详析之七:新标签攻击
- 在iOS Safari中播放离线音频
- 使用WebRTC实现远程屏幕共享
- Firefox、Android、iOS遇见WebRTC
- HTML5光线传感器简介
- HTML5安全攻防详析之八:Web Socket攻击
- HTML5安全攻防详析之完结篇:HTML5对安全的改进
- 激动人心!在网页上通过语音输入文字 - HTML5 Web Speech API介绍
- Web滚动性能优化实战
- 用CSS3设计响应式导航菜单
- 用HTML5构建高性能视差网站
- 漫谈@supports与CSS3条件规则
- HTML5下载属性简介
- 如何开发优秀的HTML5游戏?-迪斯尼《寻找奥兹之路》游戏技术详解(一)
- 如何开发优秀的HTML5游戏?-迪斯尼《寻找奥兹之路》游戏技术详解(二)
- 趋势:Chrome为打包应用提供强大新特性
- 从HTML5移动应用现状谈发展趋势
- 基于HTML5的Web跨设备超声波通信方案