使用JavaScript实现分页效果
http://www.cnblogs.com/morong/p/4123671.html#3072340
静态页面的编写:只需要html+js即可实现
var dataList = [ { "_title": "服饰 —— 服装模板", "_no": "A001", "_url": "1.jpg" }, { "_title": "农业 —— 蔬菜模板", "_no": "A002", "_url": "2.jpg" }, { "_title": "汽车 —— 轮胎模板", "_no": "A003", "_url": "3.jpg" }, { "_title": "服饰 —— 服装模板", "_no": "A004", "_url": "1.jpg" }, { "_title": "农业 —— 蔬菜模板", "_no": "A005", "_url": "2.jpg" }, { "_title": "汽车 —— 轮胎模板", "_no": "A006", "_url": "3.jpg" }, { "_title": "服饰 —— 服装模板", "_no": "A007", "_url": "1.jpg" }, { "_title": "农业 —— 蔬菜模板", "_no": "A008", "_url": "2.jpg" }, { "_title": "汽车 —— 轮胎模板", "_no": "A009", "_url": "3.jpg" } ]; // 获取id function $$(id) { return document.getElementById(id); } // 设置构造函数 function SetData() { this.elCon = $$("data"); // 页面内容元素 this.elPage = $$("page"); // 分页导航元素 this.data = dataList; // 数据列表 this.i = 0; // 从第几条开始取数据(0代表第一条) this.strNav = ""; // 存储分页导航选项 this.view = 2; // 默认一页显示多少 } // 设置原型方法 SetData.prototype = { constructor: SetData, // 指向构造函数 // 分页函数 setPageNav: function() { var len = this.data.length; for (var i = 0; i < Math.ceil(len/this.view); i++) { // 设置分页 this.strNav += "<li>"+(i+1)+"</li>"; } // 插入分页 this.elPage.innerHTML = this.strNav; this.elPage.getElementsByTagName("li")[0].className = "on"; }, // 页面数据 setPageData: function() { var num = this.i+this.view, // 如果超过长度,则获取最后的长度 len = (num < this.data.length) ? num : this.data.length, strHTML = ""; // 初始化,用于存储内容 // 遍历获取数据并设置当前页面内容 for (this.i; this.i < len; this.i++) { var _url = this.data[this.i]._url, _no = this.data[this.i]._no, _title = this.data[this.i]._title; // 设置对应的属性及内容 strHTML += "<li>"+ "<img src="+_url+" alt="+_title+" title="+_title+" />"+ "<h2>"+_title+"<span>NO."+_no+"</span></h2>"+ "</li>\r\n"; } this.elCon.innerHTML = strHTML; }, // 设置分页按钮 setBtn: function() { // 获取分页按钮 var li = this.elPage.getElementsByTagName("li"), len = li.length, _self = this; // 保存对象 // 遍历并绑定按钮事件 for (var i = 0; i < len; i++) { // 闭包绑定 (function(cur) { li[cur].onclick = function() { // 移除存在当前类的样式 for (var j = 0; j < len; j++) { // 使用className 为了兼容IE7以下 if (li[j].getAttribute("class") == "on" || li[j].getAttribute("className") == "on") { li[j].className = ""; break; // 退出循环 } } li[cur].className = "on"; // 设置当前位置 _self.i = cur * _self.view; // 设置当前页 _self.setPageData(); // 调用获取内容行数 } })(i); } } }; // 初始化对象 var setData = new SetData(); setData.setPageNav(); // 设置分页导航 setData.setPageData(); // 设置分页内容 setData.setBtn(); // 设置分页按钮
1. this.i最好是表示当前的页码,而不是当前数据在datalist中开始的位置,开始位置能通过this.i*this.view算出来,而当前页码却要经常用到;
2. 为页码绑定click事件时最好采用事件委托的方式来进行绑定,即把事件绑定到li标签的父元素上,而不是每个都绑定一遍;
3. datalist最好用形参的方式传进去,而不是在setData里直接使用;
4. 你可以把setPageNav(), setPageData()和setBtn()都放到一个init()函数里,new出一个对象后,直接调用init()函数就行了,不用每次都写三次调用。
优化后:
var dataList = [ { "_title": "服饰 —— 服装模板", "_no": "A001", "_url": "1.jpg" }, { "_title": "农业 —— 蔬菜模板", "_no": "A002", "_url": "2.jpg" }, { "_title": "汽车 —— 轮胎模板", "_no": "A003", "_url": "3.jpg" }, { "_title": "服饰 —— 服装模板", "_no": "A004", "_url": "1.jpg" }, { "_title": "农业 —— 蔬菜模板", "_no": "A005", "_url": "2.jpg" }, { "_title": "汽车 —— 轮胎模板", "_no": "A006", "_url": "3.jpg" }, { "_title": "服饰 —— 服装模板", "_no": "A007", "_url": "1.jpg" }, { "_title": "农业 —— 蔬菜模板", "_no": "A008", "_url": "2.jpg" }, { "_title": "汽车 —— 轮胎模板", "_no": "A009", "_url": "3.jpg" } ]; // 获取id function $$(id) { return document.getElementById(id); } // 设置构造函数 function SetData(elCon,elPage,data) { this.elCon = $$(elCon); // 页面内容元素 this.elPage = $$(elPage); // 分页导航元素 this.data = data; // 数据列表 this.strNav = ""; // 存储分页导航选项 this.i = 0; // 当前页 this.view = 2; // 默认一页显示多少 } // 设置原型方法 SetData.prototype = { constructor: SetData, // 指向构造函数 // 分页函数 setPageNav: function() { var len = this.data.length; for (var i = 0; i < Math.ceil(len/this.view); i++) { // 设置分页 this.strNav += "<li>"+(i+1)+"</li>"; } // 插入分页 this.elPage.innerHTML = this.strNav; this.elPage.getElementsByTagName("li")[0].className = "on"; }, // 页面数据 setPageData: function() { // 获取当前所在页面 var num = this.i*this.view, // 如果超过长度,则获取最后的长度 len = (num+this.view < this.data.length) ? num+this.view : this.data.length, strHTML = ""; // 初始化,用于存储内容 // 遍历获取数据并设置当前页面内容 for (var i = num; i < len; i++) { var _url = this.data[i]._url, _no = this.data[i]._no, _title = this.data[i]._title; // 设置对应的属性及内容 strHTML += "<li>"+ "<img src="+_url+" alt="+_title+" title="+_title+" />"+ "<h2>"+_title+"<span>NO."+_no+"</span></h2>"+ "</li>\r\n"; } this.elCon.innerHTML = strHTML; }, // 设置分页按钮 setBtn: function() { // 获取分页按钮 var li = this.elPage.getElementsByTagName("li"), len = li.length, _self = this; // 保存对象 // 添加点击事件 this.elPage.onclick = function(ev) { var ev = ev || window.event, target = ev.target || ev.srcElement; // 如果点击的是LI if (target && target.nodeName === "LI") { var cur = parseInt(target.innerHTML); // 获取当前点击事件内容 // 遍历内容,移除当前类 for (var j = 0; j < len; j++) { // 使用className 为了兼容IE7以下 if (li[j].getAttribute("class") === "on" || li[j].getAttribute("className") === "on") { li[j].className = ""; break; // 退出循环 } } li[cur-1].className = "on"; // 设置当前位置 _self.i = cur-1; // 设置当前页 _self.setPageData(); // 调用获取内容函数 } } }, // 初始化 init: function() { this.setPageNav(); // 设置分页导航 this.setPageData(); // 设置分页内容 this.setBtn(); // 设置分页按钮 } }; // 初始化对象 var setData = new SetData("data","page",dataList); setData.init(); // 初始化数据
posted on 2016-08-10 16:53 EchoLong333 阅读(489) 评论(0) 收藏 举报
浙公网安备 33010602011771号