javascript实例学习之四——javascript分页
话不多少,直接上代码
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);
}
}
}
javascript实例学习之四——javascript分页的更多相关文章
- JavaScript权威设计--JavaScript函数(简要学习笔记十一)
1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...
- JavaScript权威设计--JavaScript函数(简要学习笔记十)
1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"lik ...
- javascript笔记:javascript的关键所在---作用域链
javascript里的作用域是理解javascript语言的关键所在,正确使用作用域原理才能写出高效的javascript代码,很多javascript技巧也是围绕作用域进行的,今天我要总结一下关于 ...
- JavaScript强化教程——JavaScript 总结
本教程中我们向您讲授了如何向 html 页面添加 JavaScript,使得网站的动态性和交互性更强. 你已经学习了如何创建对事件的响应,验证表单,以及如何根据不同的情况运行不同的脚本. 你也学到了如 ...
- JavaScript学习13 JavaScript中的继承
JavaScript学习13 JavaScript中的继承 继承第一种方式:对象冒充 <script type="text/javascript"> //继承第一种方式 ...
- Javascript学习2 - Javascript中的表达式和运算符
原文:Javascript学习2 - Javascript中的表达式和运算符 Javascript中的运算符与C/C++中的运算符相似,但有几处不同的地方,相对于C/C++,也增加了几个不同的运算符, ...
- Javascript学习1 - Javascript中的类型对象
原文:Javascript学习1 - Javascript中的类型对象 1.1关于Numbers对象. 常用的方法:number.toString() 不用具体介绍,把数字转换为字符串,相应的还有一个 ...
- 第一百二十九节,JavaScript,理解JavaScript库
JavaScript,理解JavaScript库 学习要点: 1.项目介绍 2.理解JavaScript库 3.创建基础库 从本章,我们来用之前的基础知识来写一个项目,用以巩固之前所学.那么,每个项目 ...
- 使用Javascript/jQuery将javascript对象转换为json格式数据 - 海涛的CSDN博客 - 博客频道 - CSDN.NET
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
随机推荐
- 洛谷OJ P1196 银河英雄传说(带权并查集)
题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ...
- 匈牙利命名法,骆驼命名法(camel),帕斯卡(Pascal)命名法(转)
一.匈牙利命名法 Windows 编程中用到的变量(还包括宏)的命名规则匈牙利命名法,这种命名技术是由一位能干的 Microsoft 程序员查尔斯·西蒙尼(Charles Simonyi) ...
- Socket简介
本文全部摘抄http://c.biancheng.net/cpp/html/3029.html 大多数项目是在Linux下开发服务器端,而在Windows下开发客户端,需要经常在两大平台之间进行切换, ...
- memcached学习笔记4--memcache扩展操作memcached
1. 安装并配置memcache扩展库 找到php.ini文件 添加: extendsion= php_memcache.dll 并把对应的dll文件拷贝到ext目录 2. 使用PHP对Memcahc ...
- 基于java工程开发RMI服务端
ServiceRegist.java import java.rmi.Remote; import java.rmi.RemoteException; public interface Service ...
- ssi服务器端指令
SSI使用详解 你是否曾经或正在为如何能够在最短的时间内完成对一个包含上千个页面的网站的修改而苦恼?那么可以看一下本文的介绍,或许能够对你有所帮助.什么是SSI?SSI是英文Server Side I ...
- Python之list添加新元素、删除元素、替换元素
Python之list添加新元素 现在,班里有3名同学: >>> L = ['Adam', 'Lisa', 'Bart'] 今天,班里转来一名新同学 Paul,如何把新同学添加到现有 ...
- hadoop 2.4 伪分布式模式
1.core-site.xml 在<configuration></configuration>中插入 <property> <name>fs.defa ...
- zepto源码--fragment--学习笔记
文档片段fragment函数默认传递三个参数: html文档片段字符串 name标签 properties额外添加的属性 函数内部实现过程: var dom, nodes, container; 中间 ...
- 插入图片<img>
格式: <img src="图片地址" alt="下载失败时的替换文本" title="提示文本"> src:图像的位置 alt ...