paging.js
5.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
(function($, window, document) {
// 定义构造函数
function Paging(el, options) {
this.el = el;
this.options = {
pageNo: options.initPageNo || 1, // 初始页码
totalPages: options.totalPages || 1, //总页数
totalCount: options.totalCount || '', // 条目总数
slideSpeed: options.slideSpeed || 0, // 缓动速度
jump: options.jump || false, // 支持跳转
callback: options.callback || function() {} // 回调函数
};
this.init();
}
// 给实例对象添加公共属性和方法
Paging.prototype = {
constructor: Paging,
init: function() {
this.createDom();
this.bindEvents();
},
createDom: function() {
var that = this,
ulDom = '',
jumpDom = '',
content = '',
liWidth = 40, // li的宽度
totalPages = that.options.totalPages, // 总页数
wrapLength = 0;
totalPages > 6.5 ? wrapLength = 6.5 * liWidth : wrapLength = totalPages * liWidth;
for (var i = 1; i <= that.options.totalPages; i++) {
i != 1 ? ulDom += '<li>' + i + '</li>' : ulDom += '<li class="sel-page">' + i + '</li>';
}
that.options.jump ? jumpDom = '<input type="text" placeholder="1" class="jump-text" id="jumpText"><button type="button" class="jump-button" id="jumpBtn">跳转</button>' : jumpDom = '';
content =
'<button class="turnPage" id="prePage"><div class="mid_select_left_icon"><img src="../images/bicon_30@2x.png"></div></button>' +
'<div class="pageWrap" style="width:' + wrapLength + 'px">' +
'<ul id="pageSelect" style="transition:all ' + that.options.slideSpeed + 'ms">' +
ulDom +
'</ul></div>' +
'<button class="turnPage" id="nextPage"><div class="mid_select_left_icon"><img src="../images/bicon_29@2x.png"></div></button>'
;
that.el.html(content);
},
bindEvents: function() {
var that = this,
pageSelect = $('#pageSelect'), // ul
lis = pageSelect.children(), // li的集合
liWidth = lis[0].offsetWidth, // li的宽度
totalPages = that.options.totalPages, // 总页数
pageIndex = that.options.pageNo, // 当前选择的页码
distance = 100, // ul移动距离
prePage = $('#prePage'),
nextPage = $('#nextPage'),
firstPage = $('#firstPage'),
lastPage = $('#lastPage'),
jumpBtn = $('#jumpBtn'),
jumpText = $('#jumpText');
prePage.on('click', function() {
pageIndex--;
if (pageIndex < 1) pageIndex = 1;
handles(pageIndex);
})
nextPage.on('click', function() {
pageIndex++;
if (pageIndex > lis.length) pageIndex = lis.length;
handles(pageIndex);
})
firstPage.on('click', function() {
pageIndex = 1;
handles(pageIndex);
})
lastPage.on('click', function() {
pageIndex = totalPages;
handles(pageIndex);
})
jumpBtn.on('click', function() {
var jumpNum = parseInt(jumpText.val().replace(/\D/g, ''));
if (jumpNum && jumpNum >= 1 && jumpNum <= totalPages) {
pageIndex = jumpNum;
handles(pageIndex);
jumpText.val(jumpNum);
}
})
lis.on('click', function() {
pageIndex = $(this).index() + 1;
handles(pageIndex);
})
function handles(pageIndex) {
lis.removeClass('sel-page').eq(pageIndex - 1).addClass('sel-page');
if (totalPages <= 5) {
that.options.callback(pageIndex);
return false;
}
if (pageIndex >= 3 && pageIndex <= totalPages - 1) distance = (pageIndex - 3) * liWidth;
if (pageIndex == 2 || pageIndex == 1) distance = 0;
if (pageIndex > totalPages - 1) distance = (totalPages - 2) * liWidth;
pageSelect.css('transform', 'translateX(' + (-distance) + 'px)');
pageIndex == 1 ? firstPage.attr('disabled', true) : firstPage.attr('disabled', false);
pageIndex == 1 ? prePage.attr('disabled', true) : prePage.attr('disabled', false);
pageIndex == totalPages ? lastPage.attr('disabled', true) : lastPage.attr('disabled', false);
pageIndex == totalPages ? nextPage.attr('disabled', true) : nextPage.attr('disabled', false);
that.options.callback(pageIndex);
}
handles(that.options.pageNo); // 初始化页码位置
}
}
$.fn.paging = function(options) {
return new Paging($(this), options);
}
})(jQuery, window, document);