jquery 动态分页,本地分页

1. 动态,本地分页js

function Paging(element, options) {
    this.element = element;
    this.options = {
        pageNum: options.pageNum || 1,
        totalNum: options.totalNum,
        totalList: options.totalList,
        pageRows: options.pageRows,
        pageSizes: options.pageSizes,
        callback: options.callback
    };
    this.init();
}

Paging.prototype = {
    constructor: Paging,
    init: function() {
        this.createHtml();
        this.bindEvent();
    },
    createHtml: function() {
        var me = this;
        var content = [];
        var pageNum = me.options.pageNum;
        var totalNum = me.options.totalNum;
        var totalList = me.options.totalList;
        var pageRows = me.options.pageRows;
        var pageSizes = me.options.pageSizes;
        var selecthtml = ""
        for (var i = 0; i < pageSizes.length; i++) {
            if (pageRows == pageSizes[i]) {
                selecthtml += '<option value=' + pageSizes[i] + ' selected>' + pageSizes[i] + '条/页</option>'
            } else {
                selecthtml += '<option value=' + pageSizes[i] + '>' + pageSizes[i] + '条/页</option>'
            }
        }
        content.push("<span class='totalList'> 共 " + totalList + " 条 </span><select id='page-sizes'>" + selecthtml + "</select><button type='button' id='firstPage'>首页</button><button type='button' id='prePage'>上一页</button>");
        if (totalNum > 6) {
            if (pageNum < 5) {
                for (var i = 1; i < 6; i++) {
                    if (pageNum !== i) {
                        content.push("<button type='button'>" + i + "</button>");
                    } else {
                        content.push("<button type='button' class='current'>" + i + "</button>");
                    }
                }
                content.push(". . .");
                content.push("<button type='button'>" + totalNum + "</button>");
            } else {
                if (pageNum < totalNum - 3) {
                    for (var i = pageNum - 2; i < pageNum + 3; i++) {
                        if (pageNum !== i) {
                            content.push("<button type='button'>" + i + "</button>");
                        } else {
                            content.push("<button type='button' class='current'>" + i + "</button>");
                        }
                    }
                    content.push(". . .");
                    content.push("<button type='button'>" + totalNum + "</button>");
                } else {
                    content.push("<button type='button'>" + 1 + "</button>");
                    content.push(". . .");
                    for (var i = totalNum - 4; i < totalNum + 1; i++) {
                        if (pageNum !== i) {
                            content.push("<button type='button'>" + i + "</button>");
                        } else {
                            content.push("<button type='button' class='current'>" + i + "</button>");
                        }
                    }
                }
            }
        } else {
            for (var i = 1; i < totalNum + 1; i++) {
                if (pageNum !== i) {
                    content.push("<button type='button'>" + i + "</button>");
                } else {
                    content.push("<button type='button' class='current'>" + i + "</button>");
                }
            }
        }
        content.push("<button type='button' id='lastPage'>尾页</button><button type='button' id='nextPage'>下一页</button>");
        content.push("前往<input type='text' id='text' value='" + pageNum + "'></input>页");
        content.push("<span class='totalNum'> 共 " + totalNum + " 页 </span>");
        me.element.html(content.join(''));
        setTimeout(function() {
            me.dis();
        }, 20);
    },
    bindEvent: function() {
        var me = this;

        function handleSizeChange(data) {
            var id = $(data).attr('id');
            var num = parseInt($(data).html());
            var pageNum = me.options.pageNum;
            if (id === 'prePage') {
                if (pageNum !== 1) {
                    me.options.pageNum -= 1;
                }
            } else if (id === 'nextPage') {
                if (pageNum !== me.options.totalNum) {
                    me.options.pageNum += 1;
                }
            } else if (id === 'firstPage') {
                if (pageNum !== 1) {
                    me.options.pageNum = 1;
                }
            } else if (id === 'lastPage') {
                if (pageNum !== me.options.totalNum) {
                    me.options.pageNum = me.options.totalNum;
                }
            } else if (id === 'page-sizes') {
                if (pageNum !== 1) {
                    me.options.pageNum = 1;
                }
            } else if (id === 'text') {
                var val = Number($("#text").val())
                if (val < 1 || isNaN(val)) {
                    me.options.pageNum = 1
                } else if (val > me.options.totalNum) {
                    me.options.pageNum = me.options.totalNum
                } else {
                    me.options.pageNum = val
                }
            } else {
                me.options.pageNum = num;
            }
            $("#text").val(me.options.pageNum)
            me.options.pageRows = Number($("#page-sizes").val())
            me.createHtml();
            if (me.options.callback) {
                me.options.callback(me.options.pageNum, me.options.pageRows);
            }
        }
        me.element.off('click', 'button');
        me.element.on('click', 'button', function() {
            handleSizeChange(this)
        });
        me.element.off('change', 'select');
        me.element.on('change', 'select', function() {
            handleSizeChange(this)
        });
        me.element.off('change', 'input');
        me.element.on('change', 'input', function() {
            handleSizeChange(this)
        });
    },
    dis: function() {
        var me = this;
        var pageNum = me.options.pageNum;
        var totalNum = me.options.totalNum;
        if (totalNum === 1) {
            me.element.children('#firstPage, #prePage').prop('disabled', true);
            me.element.children('#lastPage, #nextPage').prop('disabled', true);
        } else {
            if (pageNum === 1) {
                me.element.children('#firstPage, #prePage').prop('disabled', true);
            } else if (pageNum === totalNum) {
                me.element.children('#lastPage, #nextPage').prop('disabled', true);
            }
        }
    }
};
$.fn.paging = function(options) {
    return new Paging($(this), options);
};

2. 动态,本地分页css

#pagination {
	margin: auto;
	margin-left: 100px;
	text-align: right;
}

/* 外面盒子样式---自己定义 */

.page_div {
	margin-top: 20px;
	color: #666;
	text-align: right;
	padding: 0 26px 0 0;
}


/* 页数按钮样式 */

.page_div button {
	display: inline-block;
	min-width: 30px;
	height: 28px;
	cursor: pointer;
	color: #666;
	font-size: 13px;
	line-height: 28px;
	background-color: #f9f9f9;
	border: 1px solid #dce0e0;
	text-align: center;
	margin: 0 4px;
	-webkit-appearance: none;
	-moz-appearance: none;
	appearance: none;
}


/* 单页数据选择框样式 */

#page-sizes {
	display: inline-block;
	min-width: 80px;
	height: 28px;
	cursor: pointer;
	color: #0073A9;
	font-size: 13px;
	line-height: 28px;
	background-color: #f9f9f9;
	border: 1px solid #0073A9;
	text-align: center;
	margin: 0 4px;
	border-radius: 0;
}

#page-sizes:focus-visible {
	outline: -webkit-focus-ring-color auto 0;
}

#text {
	width: 50px;
	height: 29px;
	color: #666;
	text-align: center;
	border: 1px solid #0073A9;
}

#firstPage,
#lastPage,
#nextPage,
#prePage {
	width: 50px;
	color: #0073A9;
	border: 1px solid #0073A9;
}

#nextPage,
#prePage {
	width: 70px;
}

.page_div .current {
	background-color: #0073A9;
	border-color: #0073A9;
	color: #FFF;
}

/* 页面数量 */
.totalPages {
	margin: 0 10px;
}

.totalPages span,
.totalSize span {
	color: #0073A9;
	margin: 0 5px;
}


/*button禁用*/

.page_div button:disabled {
	opacity: .5;
	cursor: no-drop;
}

3. 引入js,css

<!-- 引入css -->
<link rel="stylesheet" href="../css/supermarket.css">

<!-- 引入分页 -->
<script src="../js/page.js"></script>

<div id="page" class="page_div"></div>

4. 接口请求设置分页(本地)

let listQuery = {
		page: 1,
		limit: 8
};

let listData = []; // 列表源数据
let totalData = []; // 列表分页数据

// 分页对象
let paging = {
	pageNum: 1, // 当前页面
	totalNum: 1, // 总页码
	totalList: 0, // 记录总数量
	pageRows: 8, // 每页条数
	pageSizes: [8, 16, 32], // 每页显示个数选择器的选项设置
	callback: function(num, pageRows) { //回调函数
		 if (paging.pageRows === pageRows) {
		 	render(totalData[num - 1]);
		 } else {
		 	paging.pageRows = pageRows
		 	pagingMethods(listData, num, pageRows)
		 }
	}
};

//分页数据处理
function pagingMethods(data, pageNum, pageRows) {
	totalData = []
	let pagingData = []
	if (data.length) {
		data.forEach((item, index) => {
			if (pagingData.length < pageRows) {
				pagingData.push(item)
			} else {
				totalData.push(pagingData)
				pagingData = []
				pagingData.push(item)
			}
			if (index === data.length - 1 && pagingData.length) {
				totalData.push(pagingData)
			}
		});
		paging.totalList = data.length;
		paging.totalNum = totalData.length;
	}
	render(totalData[pageNum - 1]);
	// 渲染分页
	$("#page").paging(paging);
};

//接口请求数据
function getListMsg(data) {
	$.ajax({
		type: "post",//请求方式
		contentType: "application/json",
		url: ,//请求地址
		dataType: "json",
		data: JSON.stringify(data),
		success: function(res) {
			if (res.resultCode === "00000000") {
				//处理数据
				 listData = res.data.data;//请求的数据
				 paging.pageNum = 1;
				 pagingMethods(listData, paging.pageNum, paging.pageRows);
			}
		}
	});
}


//渲染页面
function render(data) {
	let prostr = '';
	if (data) {
		data.forEach((item, index) => {
			prostr += 需要渲染的页面结构
		})
	}
	$(放在那个标签页面).html(prostr);
};

5. 接口请求设置分页(接口返回分页)

let listQuery = {
		page: 1,
		limit: 8
};

// 分页对象
let paging = {
	pageNum: 1, // 当前页面
	totalNum: 1, // 总页码
	totalList: 0, // 记录总数量
	pageRows: 8, // 每页条数
	pageSizes: [8, 16, 32], // 每页显示个数选择器的选项设置
	callback: function(num, pageRows) { //回调函数
		if (paging.pageRows === pageRows) {
		    listQuery.page = num
		    listQuery.limit = pageRows
		   getListMsg(listQuery)
		} else {
		    listQuery.page = 1
		    listQuery.limit = pageRows
		    getListMsg(listQuery)
		}
	}
};

//接口请求数据
function getListMsg(data) {
	$.ajax({
		type: "post",//请求方式
		contentType: "application/json",
		url: ,//请求地址
		dataType: "json",
		data: JSON.stringify(data),
		success: function(res) {
			if (res.resultCode === "00000000") {
				render(res.data.data);
				paging.pageNum = res.data.current_page;
				paging.pageRows = res.data.per_page;
				paging.totalNum = res.data.last_page;
				paging.totalList = res.data.total;
				// 渲染分页
				$("#page").paging(paging);
			}
		}
	});
}

//渲染页面
function render(data) {
	let prostr = '';
	if (data) {
		data.forEach((item, index) => {
			prostr += 需要渲染的页面结构
		})
	}
	$(放在那个标签页面).html(prostr);
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值