原生js实现分页效果

本文实例为大家分享了js实现分页效果的具体代码,供大家参考,具体内容如下

效果如下:

代码:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>Document</title>

<style type="text/css">

</style>

</head>

<body>

<div id="page-nation"></div>

<script src="./page.js"></script>

<script>

//分页调用方法

const Api=new pageNation({

el:"#page-nation",//分页器位置

page:1,//当前页

size:5,//默认5,10,15,20

total:100,//数据总条数

styUrl:

'./page.css',//样式地址(可修改)

IsShowBtn: {//设置需要显示的按钮

choosePageSize: true,//是否显示下拉选项

IsShowPrevOrNextBtn: true,//是否显示上一页下一页按钮

IsShowEnterBtn: true,//是否显示跳转输入

IsShowTotalPage:true,//是否显示总页数

},

callback:function(page,size,total){

console.log(page,size,total);

//此处为ajax请求

}

});

</script>

</body>

</html>

page.js

var pageNation;

pageNation = (function () {

function extend(target, source) {

for (var obj in source) {

target[obj] = source[obj];

}

return target;

}

function pageNation(options) {

var defaultOptions = {

el: "body",//分页父容器

page: 1,

size: 10,

total: 0,

styUrl: 'style.css',

callback: null,

IsShowBtn: {//设置需要显示的按钮

choosePageSize: true,//是否显示下拉选项

IsShowPrevOrNextBtn: true,//否显示上一页下一页按钮

IsShowEnterBtn: true,//是否显示跳转输入

IsShowTotalPage:true,//是否显示总页数

}

};

this.options = extend(defaultOptions, options) || {};

this.options.el = document.querySelectorAll(this.options.el)[0];

this.pageT = Math.ceil(this.options.total / this.options.size);

this.init();

if (!document.querySelector("#dynamic-style")) {

this.pageStyle();

}

//this.options.callback(1,self.options.size,self.options.total);

}

var proto = pageNation.prototype || {};

proto.rander = function (page, size, total) {

this.options.page = !!page ? page : 1;

this.options.size = !!size ? size : 10;

this.options.total = !!total ? total : 0;//

this.pageT = Math.ceil(this.options.total / this.options.size);

this.init();

this.page_nation = null;

};

proto.init = function () {

var self = this;

var pageNum = function (page) {//创建分页器

return (function () {

let ol = document.createElement("ol");

ol.classList.add("page-ol");

let p = !!page ? page : 1;

let tPage = Math.ceil(self.options.total / self.options.size);

let s = p <= 3 ? 1 : p > (tPage - 3) ? tPage - 4 : p - 2;

s=s==0?1:s;

for (let i = s; i < (s + 5); i++) {

if (i > tPage) {

break;

}

let li = document.createElement("li");

li.innerText = i;

if (i == p) {

li.classList.add("hover");

}

ol.appendChild(li);

}

return ol;

})(page);

};

var sizeNum = function (size) {//重置size

return (function () {

let select = document.createElement("select");

select.setAttribute("class", "page-Select");

let s = !!size ? size : 10;

//let tPage=Math.ceil(self.options.total/self.options.size);

for (let i = 5; i <= (5 * 4); i += 5) {

let option = document.createElement("option");

option.value = i;

option.innerText = i;

if (i === self.options.size) {

option.setAttribute("selected", "selected");

}

select.appendChild(option);

}

return select;

})(size);

};

var prevBtn = function () {//上一页按钮

return (function () {

let button = document.createElement("span");

button.setAttribute("class", "prev-btn");

button.innerText = "上一页";

if (self.options.page == 1) {

button.classList.add("disabled")

};

return button;

})();

};

var nextBtn = function () {//下一页按钮

return (function () {

let button = document.createElement("span");

button.setAttribute("class", "next-btn");

button.innerText = "下一页";

if (self.options.page == self.pageT) {

button.classList.add("disabled")

}

;

return button;

})();

};

var pageMark = function () {//页码标识

return (function () {

let span = document.createElement("span");

span.setAttribute("class", "pageMark");

span.innerHTML = "<span>" + self.options.page + "</span> / <span>" + Math.ceil(self.options.total / self.options.size) + "</span>";

return span;

})();

};

var enterBtn = function () {//跳转按钮

return (function () {

let button = document.createElement("span");

button.setAttribute("class", "enter-btn");

let ipt = document.createElement("input");

ipt.value = self.options.page;

ipt.setAttribute("type", "text");

let b = document.createElement("span");

b.setAttribute("class", "enterBtn");

b.innerText = "跳转";

button.appendChild(ipt);

button.appendChild(b);

return button;

})();

};

let page_nation = self.options.el.querySelector(".page-nation");

if (page_nation != null && page_nation != "undefind") {

page_nation.innerHTML = "";

}

else {

page_nation = document.createElement("div");

page_nation.classList.add("page-nation");

self.options.el.appendChild(page_nation);

}

page_nation.appendChild(new pageNum(self.options.page));

self.options.IsShowBtn.choosePageSize&&page_nation.appendChild(new sizeNum(self.options.size));

self.options.IsShowBtn.IsShowPrevOrNextBtn&&page_nation.appendChild(new prevBtn());

self.options.IsShowBtn.IsShowPrevOrNextBtn&&page_nation.appendChild(new nextBtn());

page_nation.appendChild(new pageMark());

self.options.IsShowBtn.IsShowEnterBtn&&page_nation.appendChild(new enterBtn());

self.page_nation = document.querySelector(".page-nation");

this.switchPage(self.options.callback);

this.switchSize(self.options.callback);

return self;

};

proto.pageStyle = function () {

let headDoc = document.querySelector("head");

var linkTag = document.createElement("link");

var cssURL = this.options.styUrl;

linkTag.id = 'dynamic-style';

linkTag.href = cssURL;

linkTag.setAttribute('rel', 'stylesheet');

linkTag.setAttribute('media', 'all');

linkTag.setAttribute('type', 'text/css');

headDoc.appendChild(linkTag);

};

proto.switchPage = function (fun) {

let self = this;

let lis = this.page_nation.children[0].children;

for (let i = 0, len = lis.length; i < len; i++) {

lis[i].onclick = function () {

self.options.page = this.innerText;

self.rander(self.options.page, self.options.size, self.options.total);

};

}

this.options.el.querySelectorAll(".prev-btn")[0].onclick = function (e) {

//console.time("rr");

self.options.page = --self.options.page;

self.rander(self.options.page, self.options.size, self.options.total);

//console.timeEnd("rr");

};

this.options.el.querySelectorAll(".next-btn")[0].onclick = function (e) {

self.options.page = ++self.options.page;

self.rander(self.options.page, self.options.size, self.options.total);

};

this.options.el.querySelectorAll(".enterBtn")[0].onclick = function (e) {

let val = this.previousElementSibling.value;

if (!val || val > self.pageT || val < 1) {

alert("参数超出范围!");

return false;

} else {

self.options.page = val;

self.rander(self.options.page, self.options.size, self.options.total);

}

};

fun(self.options.page, self.options.size, self.options.total);

};

proto.switchSize = function (fun) {

let self = this;

let lis = this.page_nation.children[1];

lis.onchange = function () {

self.options.size = Number(this.value);

self.rander(1, self.options.size, self.options.total);

fun(1, self.options.size, self.options.total);

}

};

return pageNation;

})();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 原生js实现分页效果 的全部内容, 来源链接: utcz.com/p/218062.html

回到顶部