话不多少,直接上代码

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>javascript分页效果</title>
<style>
a{margin-right:5px;}
</style>
</head>
<body>
<div id="div1">
</div>
<script src="js/myPage.js"></script>
</body>
</html>

javascript代码:

window.onload = function() {
var page = new Page({
'id': 'div1',
'allNum': ,
'showNum': ,
'nowNum': ,
'callback':function(nowIndex,allIndex){
alert('当前页'+nowIndex+',总页数'+allIndex);
}
});
page.init(); } //采用面向对象的方法进行封装
function Page(opt) {
if (!opt) {
return;
} this.id = opt.id;
this.oParent = document.getElementById(this.id);
//一共有多少页
this.allNum = opt.allNum || ;
//显示多少个分页
this.showNum = opt.showNum || ;
//当前选择的页面
this.nowNum = opt.nowNum || ;
this.callback=opt.callback||function(){};
}
Page.prototype = {
constructor: Page,
init: function() {
var that = this;
this.change();
},
change: function(curNum) {
this.nowNum = curNum;
//为了提高性能,可以移除原来所有链接的事件处理程序
var aAs = this.oParent.getElementsByTagName('a');
for (var i = ; i < aAs.length; i++) {
aAs[i].onclick = null;
}
this.oParent.innerHTML = ''; var tmp = Math.floor(this.showNum / );
//处理首页,当nowNum>tmp+1,并且allNum>showNum时显示
if (this.nowNum > tmp + && this.allNum > this.showNum) {
this.appendLink('#1', '首页');
}
//处理上一页,只要当前选择页不是首页,就呈现
if (this.nowNum > ) {
this.appendLink('#' + (this.nowNum - ), '上一页');
}
//处理中间页码
//如果总页码小于显示页码数,从1开始以此显示
if (this.allNum <= this.showNum) {
this.appendPageLinks(, this.allNum);
} else {
//如果选择的是第1页到第tmp页,显示前面showNumge
if (this.nowNum <= tmp) {
this.appendPageLinks(, this.showNum);
}
//如果选择是第this.allNum-tmp,显示最后showNum个
else if (this.nowNum >= this.allNum - tmp) {
this.appendPageLinks(this.allNum - this.showNum + , this.allNum);
}
//其他情况,则以this.nowNum为中心,显示this.showNum个
else {
this.appendPageLinks(this.nowNum - tmp, this.nowNum + tmp);
}
}
//处理下一页,只要当前选择的不是最后一页,就显示下一页
if (this.nowNum < this.allNum) {
this.appendLink('#' + (this.nowNum + ), '下一页');
}
//处理最后一页,当nowNum<this.allNum-tmp,并且allNum>showNum时候显示
if (this.nowNum < this.allNum - tmp & this.allNum > this.showNum) {
this.appendLink('#' + this.allNum, '尾页');
}
//添加事件处理程序
var that = this;
var aAs = this.oParent.getElementsByTagName('a');
for (var i = ; i < aAs.length; i++) {
aAs[i].onclick = function() {
var index = parseInt(this.getAttribute('href').substring());
that.change(index);
that.callback(that.nowNum,that.allNum);
return false;
}
}
},
appendLink: function(href, innerHtml) {
var oA = document.createElement('a');
oA.href = href;
oA.innerHTML = innerHtml;
this.oParent.appendChild(oA);
},
appendPageLink: function(pageNum) {
if (pageNum === this.nowNum) {
this.appendLink('#' + pageNum, pageNum);
} else {
this.appendLink('#' + pageNum, '[' + pageNum + ']');
} },
appendPageLinks: function(startPageNum, endPageNum) {
for (var i = startPageNum; i <= endPageNum; i++) {
this.appendPageLink(i);
}
} }

最新文章

  1. star ccm+ 11.02安装
  2. SharePoint 2010 系统账户没完全控制权限了
  3. openjudge ROADS
  4. [Java] HashMap的用法
  5. Actor模型
  6. 调整cell的间距
  7. java volatile的一个验证反例(转)
  8. PHP之APC缓存详细介绍(学习整理)
  9. 用for、while、do-while循环输出10句“好好学习,天天向上!”
  10. ionic 中关于日期的转换格式
  11. 使用graphviz画图
  12. Java中CountDownLatch和CyclicBarrier的使用和比较
  13. 全文搜索引擎——Solr
  14. elasticsearch-head安装及启动
  15. Mapreduce 历史服务 配置启动查看
  16. Linux使用NFS服务实现远程共享
  17. opencv输出图片像素值
  18. SSIS 遍历目录,把文件内容导入数据库
  19. 600. Non-negative Integers without Consecutive Ones
  20. [转] 在linux下使用Terminator

热门文章

  1. ci实现RBAC,详细解释原理和核心代码显示
  2. 在Windows下部署安装hexo
  3. FZU 1018 枚举dp
  4. linux使脚本在后台运行
  5. 总结的一些PHP开发中的tips
  6. PHP学习(一)----变量及字符串
  7. Selenium 遇到的问题
  8. nrf51822裸机教程-SPI(主)
  9. Scrum 的相关概念
  10. C#判断文件是复制还是剪切