原生就是实现分页功能

代码如下:

var pagination = function(option,fun){
this.parentId = option.id; //容器
this.pageSize = option.pageSize || 1; //每页显示多少条
this.totals = option.totals || 0; //总条目数
this.currentPage = option.currentPage || 1; //当前页
this.showFirstBtn = option.showFirstBtn || false; //显示首页按钮
this.showLastBtn = option.showLastBtn || false; //显示尾页按钮
this.totalPage = Math.ceil(this.totals / this.pageSize);//总页数
this.firstText = '首页';
this.lastText = '尾页';
this.preText = '上一页';
this.nextText = '下一页';
this.goText = '跳转至';
/**
* 创建dom元素
*/
this.createDom = function(nodeName,attr,text){
var el = document.createElement(nodeName);
if(attr){
for(var key in attr){
el.setAttribute(key,attr[key]);
}
}
if(text){
el.innerText = text;
}
return el;
}
/**
* 添加className
*/
this.addClass = function(ele,className){
var oldClass = ele.className.split(' ');
if(oldClass.indexOf(className) < 0){
oldClass.push(className);
ele.className = oldClass.join(' ');
}
}
/**
* 删除class
*/
this.delClass = function(ele,className){
var classArr = ele.className.split(' ');
classArr.forEach(function(name,i){
if(name == className){
classArr.replace(i,1);
}
});
ele.className = classArr;
}
/**
* 是否包含class
*/
this.hasClass = function(ele,className){
var classArr = ele.className.split(' ');
return classArr.indexOf(className) < 0 ? false : true;
}
var self = this;
this.refshPage = function(index){
self.currentPage = index;
fun(index);
self.renderPage();
var pageParent = document.getElementById(self.parentId);
if(index == 1){
self.addClass(pageParent.querySelector('.preBtn'),'btnDisabled'); }else if(index == self.totalPage){
self.addClass(pageParent.querySelector('.nextBtn'),'btnDisabled');
}else{
self.delClass(pageParent.querySelector('.preBtn'),'btnDisabled');
self.delClass(pageParent.querySelector('.nextBtn'),'btnDisabled');
}
}
/**
* 生成分頁dom
*/
this.getPageDom = function(index,totalPage){
var pageBox = self.createDom('div',{class:'pageBox'});
var firstBtn = self.createDom('span',{class:'firstBtn'},self.firstText);
var lastBtn = self.createDom('span',{class:'lastBtn'},self.lastText);
var preBtn = self.createDom('span',{class:'preBtn'},self.preText);
var nextBtn = self.createDom('span',{class:'nextBtn'},self.nextText);
if(self.showFirstBtn){
pageBox.appendChild(firstBtn);
}
if(self.showLastBtn){
pageBox.appendChild(lastBtn);
}
firstBtn.onclick = function(){
self.refshPage(1);
}
lastBtn.onclick = function(){
self.refshPage(totalPage);
}
preBtn.onclick = function(){
var index = --self.currentPage;
if(index < 1)index = 1;
self.refshPage(index);
}
nextBtn.onclick = function(){
var index = ++self.currentPage;
if(index > totalPage)index = totalPage;
self.refshPage(index);
}
pageBox.appendChild(preBtn);
if(totalPage <= 10){
for(var i = 1; i <= totalPage; i++){
var page = self.createDom('span',{class:'pageNum'},i);
if(i == index){
self.addClass(page,'pageActive'); }
pageBox.appendChild(page);
(function(i){
page.onclick = function(){
self.refshPage(i);
}
})(i);
}
pageBox.appendChild(nextBtn);
}else{
if(index <= 5){
for(var i = 1; i < 9; i++){
var page = self.createDom('span',{class:'pageNum'},i);
if(i == index) self.addClass(page,'pageActive');
pageBox.appendChild(page);
(function(i){
page.onclick = function(){
self.refshPage(i);
}
})(i);
}
pageBox.appendChild(self.createDom('span',{class:'dots'},'...'));
var lastPage = self.createDom('span',{class:'pageNum'},totalPage);
pageBox.appendChild(lastPage);
lastPage.onclick = function(){
self.refshPage(totalPage);
}
pageBox.appendChild(nextBtn);
}
if(index >= (totalPage - 4)){
var firstPage = self.createDom('span',{class:'pageNum'},1);
firstPage.onclick = function(){
self.refshPage(1);
}
pageBox.appendChild(firstPage);
pageBox.appendChild(self.createDom('span',{class:'dots'},'...'));
for(var i = totalPage - 9; i <= totalPage; i++){
var page = self.createDom('span',{class:'pageNum'},i);
if(i == index) self.addClass(page,'pageActive');
pageBox.appendChild(page);
(function(i){
page.onclick = function(){
self.refshPage(i);
}
})(i);
}
pageBox.appendChild(nextBtn);
}
if(index > 5 && index < (totalPage - 4)){
var firstPage = self.createDom('span',{class:'pageNum'},1);
firstPage.onclick = function(){
self.refshPage(1);
}
pageBox.appendChild(self.createDom('span',{class:'dots'},'...'));
for(var i = index - 3; i <= index + 3; i++){
var page = self.createDom('span',{class:'pageNum'},i);
if(i == index) self.addClass(page,'pageActive');
pageBox.appendChild(page);
(function(i){
page.onclick = function(){
self.refshPage(i);
}
})(i);
}
pageBox.appendChild(self.createDom('span',{class:'dots'},'...'));
var lastPage = self.createDom('span',{class:'pageNum'},totalPage);
pageBox.appendChild(lastPage);
lastPage.onclick = function(){
self.refshPage(totalPage);
}
pageBox.appendChild(nextBtn);
}
}
if(index == 1){
self.addClass(preBtn,'btnDisabled');
}else if(index == totalPage){
self.addClass(nextBtn,'btnDisabled');
}
if(self.showLastBtn){
pageBox.appendChild(lastBtn);
}
return pageBox;
};
/**
* 渲染page
*/
this.renderPage = function(){
var pageParent = document.getElementById(self.parentId);
var pagesDom = self.getPageDom(self.currentPage,self.totalPage);
pageParent.innerHTML = '';
pageParent.appendChild(pagesDom);
}
this.renderPage();
}

  调用方法:

new pagination({
id:dataStore.pageId,
pageSize:dataStore.pageSize,
totals:data.length,
currentPage:1
},function(index){
var startNum = (index - 1 ) * dataStore.pageSize;
var endNun = index * dataStore.pageSize;
var listData = data.slice(startNum,endNun);
renderMain(listData);
});

  

分页效果:

原生js实现分页功能的更多相关文章

  1. 原生JS实现分页效果2.0(新增了上一页和下一页,添加当前元素样式)

    虽然写的很烂,但至少全部都是自己写的,因为这个没有固定的顺序,所以就没有封装,如果你技术好的话,可以你写的分享给我,谢谢. <!DOCTYPE html><html lang=&qu ...

  2. 原生JS实现分页效果1.0

    不太完整,写的太急,等等加上完整注释,写起来还是有些难度的,写的有点水,后面再改进改进. <!DOCTYPE html><html lang="en">&l ...

  3. C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginator插件和knockout.js完成分页功能 图片在线裁剪和图片上传总结 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi

    C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替 ...

  4. 原生js版分页插件

    之前我在自己的博客里发表了一篇用angularJs自定义指令实现的分页插件,今天简单改造了一下,改成了原生JavaScript版本的分页插件,可以自定义一些简单配置,特此记录下来.如有不足之处,欢迎指 ...

  5. 原生 js 写分页

    欢迎留言或者加本人QQ172360937咨询 这段代码是用原生 js 写的一个分页的效果 <!doctype html> <html lang="en"> ...

  6. 原生js显示分页效果

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. 原生js实现分页效果(带实例)

    小小插件(静态分页) 效果图: 首先实现简单功能: <!DOCTYPE html> <html> <head> <meta http-equiv=" ...

  8. 用pageGroup.js实现分页功能

    1.html页面中 引入 <link rel="stylesheet" type="text/css" href="/stylesheets/p ...

  9. 原生js 定义分页控件,类似于百度搜索

    实现一个类似于百度搜索结果的分页样式,样式可以自定义,接近于原生,少部分Jquery . 1.实现效果截图(默认无任何样式)  2.主要程序代码 define(function (require, e ...

随机推荐

  1. Java编程思想:NIO知识点

    import java.io.*; import java.nio.*; import java.nio.channels.FileChannel; import java.nio.charset.C ...

  2. python基础知识四 小数据池,深浅拷贝,集合+菜中菜

    四.小数据池,深浅拷贝,集合+菜中菜 1小数据池 --缓存机制(驻留机制) ​ '==' 判断两边内容是否相等 ​ 'is' 基于内存地址进行判断是否相同 a = 10 b = 10 print(a ...

  3. Day1 -Python program

    采用python 3.5 用PyCharm编译 第一串代码 print ("hello,world!") 练习1 输入一个用户名和密码,如果输入正确,就欢迎登陆,否则就显示错误. ...

  4. java高并发系列 - 第15天:JUC中的Semaphore,最简单的限流工具类,必备技能

    这是java高并发系列第15篇文章 Semaphore(信号量)为多线程协作提供了更为强大的控制方法,前面的文章中我们学了synchronized和重入锁ReentrantLock,这2种锁一次都只能 ...

  5. 找bug的过程

    关于昨天程序出差我找bug的过程记录 昨天才程序 https://www.cnblogs.com/pythonywy/p/11006273.html ├── xxxx │ ├── src.py │ └ ...

  6. restapi(2)- generic restful CRUD:通用的restful风格数据库表维护工具

    研究关于restapi的初衷是想搞一套通用的平台数据表维护http工具.前面谈过身份验证和使用权限.文件的上传下载,这次来到具体的数据库表维护.我们在这篇示范里设计一套通用的对平台每一个数据表的标准维 ...

  7. python带有GIL解释器锁

    1.GIL是什么?GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定. 2.每个CPU在同一时间只能执行一个线程(在 ...

  8. Python基础总结之第十天开始【认识一下python的另一个数据对象-----字典】(新手可相互督促)

    看了大家的评论,还是有意外的收货.感谢每个小伙伴的评论与补充. 众人拾柴火焰高~ 今天的笔记是记录python中的数据对象----字典! 前面有讲到list列表和tuple元组的笔记,他们都是一样可以 ...

  9. DHCP服务器的搭建及抓包分析DHCP的实现

    原文:http://blog.51cto.com/liwenhui/105129 1.环境搭建:     DC&DHCP SERVER     IP:192.168.1.254 ( 这是一台D ...

  10. 测试通过mweb进行发布Title

    MWeb 是专业的 Markdown 写作.记笔记.静态博客生成软件,目前已支持 Mac,iPad 和 iPhone.MWeb 有以下特色: 软件本身: 使用原生的 macOS 技术打造,追求与系统的 ...