Firefox有个自动翻页的插件AutoPager,使用起来非常的方便。腾讯微博也有相同的功能,当鼠标滑动到底部时会自动展开下一页,如下图所示:

展开后如下所示:

这个功能虽然比较小,但是实现起来是非常有意思的事情,我们可以选择多种方法达到目的。下面我介绍一种简单的实现方式。

1、首先移动滚动条会触发window.onscroll事件。

2、我们可以根据滚动条滚动时屏幕位置和页面底部的距离来判断是否需要翻页。

需要用到三个函数:

1、pageHeight:页面总高度。

2、windowHeight:屏幕高度。

3、ScollY:页面滚动的高度。

pageHeight减去windowHeight减去ScollY即为当前屏幕底部到页面底部的距离,如下图所示:

下面我们可以来实现这个功能了,我们设置一个阈值来设定页面加载的次数。

<!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的简单实现相关推荐

  1. 在docker上安装部署tomcat项目 超简单,拿来主义

    在docker中部署tomcat,非常简单,而且省去了手动安装jdk等步骤,只需要将war包复制在容器tomcat实例中的webapps下面即可.以下将详细讲解流程: 在windows中打好包以后用w ...

  2. Linux下tomcat的安装与卸载以及配置(超简单)

    无敌简单的几步 1.安装 //首先你需要下载好tomcat包 sudo tar -xvzf apache-tomcat-7.0.85.tar.gz(这里是包名) -C 你要放的位置 2.卸载 rm - ...

  3. Docker安装Apache与运行简单的web服务——httpd helloworld

    Docker运行简单的web服务--httpd helloworld目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker运行简单的web ...

  4. Docker的安装、镜像源更换与简单应用

    Docker的安装.镜像源更换与简单应用[阅读时间:约20分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.Docker的安装 四.Docker的简单应用 1. ...

  5. 基于Golang的简单web服务程序开发——CloudGo

    基于Golang的简单web服务程序开发--CloudGo[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 (1)基本要求 (2)扩展要求 三.具体 ...

  6. 简单图文配置golang+vscode【win10/centos7+golang helloworld+解决install failed等情况】

    博客目录(阅读时间:10分钟) 一.win10 0.系统环境 1. win10配置golang环境 ①下载相关软件 ②创建gowork工作空间 ③配置环境变量(GOPATH+PATH) ④验证环境配置 ...

  7. 简单介绍互联网领域选择与营销方法

    在我看来,互联网领域的选择是"安家",而营销方法的不同则表现了"定家"的方式多种多样,只有选对了,"家"才得以"安定". ...

  8. JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

    一.什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的.停工时间,就是不能向用户提供服务的时间.高可用,就是系统具有高度可用性,尽量减少停工时间.如何用最简单的方法来搭建 ...

  9. java发送简单邮件_Java程序实现发送简单文本邮件

    /** * Java程序实现发送简单文本邮件 * * @author Administrator * */ public class SendTextMail { // 定义发件人地址 public  ...

最新文章

  1. 这次真的是下定决心了
  2. margin和padding
  3. Linux shell 读取一行
  4. 关于耳机的国标和美标的区分
  5. 远程登录另一个mysql 数据库_Ubuntu中开启MySQL远程访问功能,并将另一个数据库服务器中的数据迁移到新的服务器中...
  6. canvas笔记-lineCap的使用
  7. poll/epoll/keyed-poll/keyed-epoll的唤醒--分层次的解决方案
  8. adb 51 android.rules,使用51-android-rules解决ubuntu上不识别 android手机的问题
  9. Python对命令提示符cmd以及操作系统的一些操作
  10. Android FrameWork——StatusBar
  11. 京东金融移动安全体系
  12. Qt如何给一个button,悬浮 、按下设置不同的背景图
  13. qq空间显示手机型号android,手机qq空间发说说怎么修改/隐藏显示的手机型号?
  14. in field list is ambiguous 解决方法
  15. 计算机切换用户快捷键,Win10系统中快速切换用户有哪些快捷小技巧
  16. matlab gui双音拨号,用matlab GUI功能模拟DTMF拨号系统.doc
  17. 修饰数码相机图像以便用于 CMYK 打印作业
  18. Nginx启动不了报错未找到命令的解决方法(- bash: nginx: 未找到命令)
  19. ROS(indigo)机器人操作系统学习有趣丰富的Gazebo仿真示例evarobot
  20. 搞砸一个产品的功能安全

热门文章

  1. 安装mysql后环境变量_环境变量配置2 安装mysql
  2. aix创建oracle表空间,Oracle for AIX基于裸设备的表空间扩充步聚
  3. 接口测试——测试用例执行
  4. 用java编写一个故事的程序_使用Java怎么编写一个递归程序
  5. 如何在NVIDIA(英伟达)官网下载老版本Toolkit-SDK---例如下载CUDA Toolkit 8.0
  6. C++动态绑定和静态绑定
  7. CUDA初探—环境配置
  8. 深入解析软件测试行业!它是否存在前景和出路?
  9. 计算机动画制作过程原理,计算机制作动画的基本原理及运动规律.ppt
  10. 【java】窗口和流的应用