AutoPager的简单实现


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调用会不会多次出现呢?

最新板本请去官方下载:http://www.lieqikeji.com/Anli_View/Id-8.aspx 分页效果: MyText=[{0}] MyTextTop=首页 MyTextEnd=尾页 MyPageNum=5 MyTextUp=上一页 MyTextDown=下一页 首页 上一页 [1] [2] [3] [4] [5] 下一页 尾页 MyText=第{0}页 MyTextTop=第{0}页 MyTextEnd=第{0}页 MyPageNum=5 MyTextUp=上一页 MyTextDown=下一页 第1页 上一页 第1页 第2页 第3页 第4页 第5页 下一页 第n页 一、添加 Dll 到Bin 目录下 二、网页头部添加引用如下: <%@ Register Assembly="Web_AutoPageNum" Namespace="SomoWeb.Web_AutoPageNum" TagPrefix="Web_AutoPageNum" %> 三、网页中使用如下: <Web_AutoPageNum:Web_AutoPageNum runat="server" ID="Web_AutoPageNum1" /> 四、常用属性说明 1、MyHtmlText:Html 标记 如li 则显示为<li>[页码]</li> 2、MyUrlTop:URL后前部分 如news.aspx?page= 则显示为<li><a href='news.aspx?page=页码'>[页码]</a></li> 3、MyUrlEnd:URL后半部分 如&type=1 则显示为<li><a href='news.aspx?page=页码&type=1'>[页码]</a></li> 4、MyText:正常显示文本 如第{0}页 则显示为<li><a href='news.aspx?page=页码&type=1'>第{页码}页</a></li> 5、MyTextTop:第一页 如首页 则显示为 <li><a href='news.aspx?page=1&type=1'>首页</a></li> <li><a href='news.aspx?page=页码&type=1'>第{页码}页</a></li> 5、MyTextEnd:尾页 如尾页 则显示为 <li><a href='news.aspx?page=1&type=1'>首页</a></li> <li><a href='news.aspx?page=页码&type=1'>第{页码}页</a></li> <li><a href='news.aspx?page=最后一页&type=1'>尾页</a></li> 6、MyTextUp:上一页 如上一页 则显示为 <li><a href='news.aspx?page=1&type=1'>首页</a></li> <li><a href='news.aspx?page=1&type=1'>上一页</a></li> <li><a href='news.aspx?page=页码&type=1'>第{页码}页</a></li> <li><a href='news.aspx?page=最后一页&type=1'>尾页</a></li> 7、MyTextDown:下一页 如下一页 则显示为 <li><a href='news.aspx?page=1&type=1'>首页</a></li> <li><a href='news.aspx?page=1&type=1'>上一页</a></li> <li><a href='news.aspx?page=页码&type=1'>第{页码}页</a></li> <li><a href='news.aspx?page=1&type=1'>下一页</a></li> <li><a href='news.aspx?page=最后一页&type=1'>尾页</a></li> 8、MyPageNum:设置每页显示多少条记录 9、MyDataCount:共有多少记录 10、MySiteNum:显示跳转连接数量 如1则显示 首页 上一页 [页码] 下一页 尾页 如3则显示 首页 上一页 [页码] [页码] [页码] 下一页 尾页 11、MySiteNew:设置当前页码 当前页码特殊显示标记<a><span>[页码]</span><a> 可以通过设计 <span>样式 来控制当前显示页码样式 13、MySiteNewText:设置当前页码标记 当前页码特殊显示标记<a><当前页标记>[页码]</当前页标记><a> 可以通过设计 <当前页标记>样式 来控制当前显示页码样式 五、样式控制策略 页面代码: <div class="WebUser_PageAutoSite"><Web_AutoPageNum:Web_AutoPageNum runat="server" ID="Web_AutoPageNum1" /></div> 样式表: /*--- 分页 ---*/ .WebUser_PageAutoSite{width:350px;margin:15px auto 20px;} .WebUser_PageAutoSite li{ float:left; margin-left:2px; margin-right:2px;} .WebUser_PageAutoSite span{ color:#808080;} 说明: WebUser_PageAutoSite :主样式 WebUser_PageAutoSite 标记 (MyHtmlText) 内容样式 WebUser_PageAutoSite span 当前页样式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值