原生js自定义分页插件
作者:互联网
一款简单的js分页插件,支持修改文本“首页”“上一页”“下一页”“末尾”。自定义总页数,当前页等分页功能代码。 css代码
*{
margin: 0;
padding: 0;
}
html,
body{
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.paging{
display: flex;
align-items: center;
}
.paging div{
border: 1px solid rgb(211, 211, 211);
padding: 10px;
border-radius: 10px;
cursor: pointer;
margin: 0 10px;
font-size: 14px;
}
.paging div.disable{
color: #fff;
cursor: not-allowed;
background-color: rgb(211, 211, 211);
}
.paging div.active{
border: none;
background-color: rgb(78, 216, 250);
color: #fff;
}
html代码
<div class="paging"></div>
<script src="js/index.js"></script>
<script>
let paging = new Paging({
total: 100,
})
</script>
js代码
function Paging(options) {
let defaultValue = {
total: 0,
current: 1,
firstText: '首页',
prevText: '上一页',
nextText: '下一页',
lastText: '尾页',
PageSize: 10,
PageNum: 5,
container: document.getElementsByClassName('paging')[0]
}
this.options = Object.assign({}, defaultValue, options);
this.show();
this.PageClick()
}
Paging.prototype.show = function () {
let disable = "";
let PageTotalNum = this.getPageTotalNum();
this.options.container.innerHTML = "";
if(this.options.current === 1){
disable = 'disable'
}
this.createElement('first ' + disable, this.options.firstText);
this.createElement('prev ' + disable, this.options.prevText);
this.createNumElement();
disable = ""
if(this.options.current === PageTotalNum){
disable = 'disable'
}
this.createElement('next ' + disable, this.options.nextText);
this.createElement('last ' + disable, this.options.lastText);
let span = document.createElement('span');
let i = `<i>${this.options.current}</i> /<i>${PageTotalNum}</i>`;
span.innerHTML = i;
this.options.container.appendChild(span)
}
Paging.prototype.createNumElement = function() {
let min = this.options.current - Math.floor(this.options.PageNum / 2);
if(min < 1) {
min = 1;
}
let max = min + this.options.PageNum - 1;
let PageTotalNum = this.getPageTotalNum();
if (max > PageTotalNum){
max = PageTotalNum;
}
let active = "";
for(let i = min; i <= max; i ++) {
if(this.options.current === i) {
active = 'active';
}else{
active = '';
}
this.createElement('pagingDiv ' + active, i);
}
}
Paging.prototype.createElement = function(specialStyle, content) {
let oDiv = document.createElement('div');
oDiv.className = specialStyle;
oDiv.innerText = content;
this.options.container.appendChild(oDiv);
}
Paging.prototype.getPageTotalNum = function() {
return Math.ceil(this.options.total / this.options.PageSize)
}
Paging.prototype.PageClick = function() {
let _this = this;
let PageTotalNum = this.getPageTotalNum();
this.options.container.addEventListener('click', function(e) {
if(e.target.classList.contains('first')){
_this.toPage(1);
} else if (e.target.classList.contains('prev')) {
_this.toPage(_this.options.current - 1);
} else if (e.target.classList.contains('next')) {
_this.toPage(_this.options.current + 1);
} else if (e.target.classList.contains('last')) {
_this.toPage(PageTotalNum);
} else if(e.target.classList.contains('pagingDiv')){
_this.toPage(+e.target.innerText);
}
})
}
Paging.prototype.toPage = function (page){
let PageTotalNum = this.getPageTotalNum();
if(page < 1) {
page = 1;
}
if(page > PageTotalNum){
page = PageTotalNum;
}
this.options.current = page;
this.show()
}
标签:插件,自定义,PageTotalNum,current,Paging,disable,let,js,options 来源: https://blog.csdn.net/weixin_45959525/article/details/113831137