Pagination.js是一款简单实用且功能齐全的jQuery分页插件。该jQuery分页插件提供多种数据源方式,众多的配置参数,回调函数,显示控制等,还提供了5套内置的分页条皮肤。
使用方法
数据源
数据源是最终提供给分页组件的是一个数组。Pagination.js支持4最后数据源格式:
dataSource array | string | object | function
1、数组格式:直接提供一个数组,例如:
['1', '2', '3', '4']
2、Object:提供一个对象,里面要包含数组,可以通过locator: 'data'
指定这个数组
{ data: ['1', '2', '3', '4'] }
3、Function:提供一个自定义函数,根据自己的业务逻辑返回数组,自定义程度很高,可以实现上面2种方式可以动态组装数据,使用done
返回数据,如:
dataSource: function(done){ var result = []; for(var i = 1; i < 196; i++){ result.push(i); } done(result); }
也可以发送请求获取数据,使用done
异步返回数据。
dataSource: function(done){ $.ajax({ type: 'GET', url: '/test.json', success: function(response){ done(response); } }); }
4、URL:提供一个URL,通过Ajax返回数据,适用于异步分页,每次请求返回一页的数据,返回的数据也可以通过locator
查找。
如果URL为file、http或https协议,会用jsonp发送请求,否则为Ajax。
/test.json
每次分页发起请求时,会附加两个参数pageNumber
和pageSize
,也可使用alias
来指定参数名。
/test.json?pageNumber=2&pageSize=10
配置参数
locator string | function
:这个参数与dataSource
相关,一般情况下,dataSource
是一个数组,可以直接传给分页组件处理。但如果返回的是Object
,那么就需要指定那个数组,默认为data
。指定locator
可定位到数据源的位置,支持2种方式:1、String
{ data: ['1', '2', '3', '4'] }
指定
locator: 'data'
之后,最终传给分页组件的就是['1', '2', '3', '4']
。此外,还支持多层定位,如果dataSource
是下面代码的样子,则可用locator: 'a.b'
:{ a: {b: ['1', '2', '3', '4']} }
2、Function:提供一个自定义函数,找到数组的位置,并返回。
locator: function(){ // find data and return return 'a.b'; }
通过Ajax获取的数据同样会应用此规则。
totalNumber
:类型:number,默认值:1。条目总数,异步分页时必填,模拟分页时为数组的长度pageNumber
:类型:number,默认值:1。指定初始化时加载哪一页的数据pageSize
:类型:number,默认值:10。每页的条目数pageRange
:类型:number,默认值:2。可见的页码范围,即当前页码两边的页码数量。比如当前是第 6 页,设置 pageRange 为2,则页码条显示为'1...4 5 6 7 8'callback function(data, pagination)
:每次翻页时的回调,callback
会传入两个参数:callback: function(data, pagination){ ... }
参数 类型 描述 data array 当页数据 pagination object 包含当页配置信息的对象 pagination对象包含以下属性值:
参数 类型 描述 pageNumber number 当前页码 pageRange number 页码范围 pageSize number 每页条目数 totalPage number 总页数 totalNumber number 总条目数 el jQueryObject 分页实例的容器 direction number 分页方向,往前翻页时值为-1,往后翻为1,初始化时为0 alias
:类型:Object。请求的参数别名,用于异步分页,默认为空。例如:alias: { pageNumber: 'pageNum', pageSize: 'limit' }
那么通过Ajax发起请求时,会替换默认的pageNumber和pageSize。
/test.json?pageNum=2&limit=10
显示控制
参数 | 类型 | 默认值 | 描述 |
showPrevious | boolean | true | 是否显示 '上一页' |
showNext | boolean | true | 是否显示 '下一页' |
showPageNumbers | boolean | true | 是否显示 '页码' |
showNavigator | boolean | false | 是否显示导航器 |
showGoInput | boolean | false | 是否显示跳转输入框 |
showGoButton | boolean | false | 是否显示跳转按钮 |
showFirstOnEllipsisShow | boolean | true | 是否在有省略号时显示开始页码showBeginingOnOmit: false, pageRange: 1, totalNumber: 100, pageSize: 10 像上面这样设置,分页会显示为:分页条会显示成这样 '... 4 5 6 ... 10' |
showLastOnEllipsisShow | boolean | true | 是否在有省略号时显示结束页码showEndingOnOmit: false, pageRange: 1, totalNumber: 100, pageSize: 10 像上面这样设置,分页会显示为:分页条会显示成这样 '1 ... 4 5 6 ...' |
autoHidePrevious | boolean | false | 是否在当前显示为第一页时隐藏 '上一页' 按钮 |
autoHideNext | boolean | false | 是否在当前显示为最后一页时隐藏 '下一页' 按钮 |
分页样式
参数 | 类型 | 默认值 | 描述 |
classPrefix | string | 'pagination' | 样式前缀 |
className | string | '' | 附加给分页容器的额外样式类 |
activeClassName | string | 'active' | 选中页码的样式类 |
disableClassName | string | 'disabled' | 不可用页码的样式类 |
ulClassName | string | '' | 附加给分页容器下的 'ul' 元素的样式类 |
定制样式
参数 | 类型 | 默认值 | 描述 |
prevText | string | « ,即符号« |
'上一页' 的文本 |
nextText | string | » ,即符号» |
'下一页' 的文本 |
ellipsisText | string | '...' | 省略号文本 |
goButtonText | string | 'Go' | 跳转按钮文本 |
formatNavigator | string | function | <%= currentPage %> / <%= totalPage %>,也可提供一个自定义函数,返回一个这样的字符串 | 导航器格式化模板。提供 3 个模板变量:currentPage :当前页码totalPage :总页数totalNumber :总条目数 |
formatGoInput | string | function | <%= input %> | 跳转输入框格式化模板,默认为 <%= input %>,也可提供一个自定义函数,返回一个这样的字符串。 <%= input %> 相当于 <input type="text" class="J-paginationjs-go-pagenumber"> 的一个包装,所以,也可自定义一个输入框标签元素,只需要确保带有 J-paginationjs-go-pagenumber 这个class即可。提供 4 个模板变量: input :输入框currentPage :当前页码totalPage :总页数totalNumber :总条目数 |
formatGoButton | string | function | <%= button %> | 跳转按钮格式化模板,默认为 <%= button %>,也可提供一个自定义函数,返回一个这样的字符串。<%= button %> 相当于 <input type="button" class="J-paginationjs-go-button">,所以,也可自定义一个跳转按钮的标签元素,只需要确保带有 J-paginationjs-go-button 这个class即可。提供 4 个模板变量:button :按钮currentPage :当前页码totalPage :总页数totalNumber :总条目数 |
header | string | function | null | 自定义头部内容。提供 3 个模板变量:currentPage :当前页码totalPage :总页数totalNumber :总条目数 |
footer | string | function | null | 自定义尾部内容。提供 3 个模板变量:currentPage :当前页码totalPage :总页数totalNumber :总条目数 |
pageLink | string | null | 分页的链接 |
方法
分页初始化之后,可以使用下面列出的方法来改变分页的行为。
var container = $('#example1'); container.pagination({ ... }); container.pagination('previous');
previous
:触发上一页。next
:触发下一页。go
:跳转到指定页,有以下 2 种使用方式。container.pagination('go', 8) container.pagination(8)
也支持自定义回调函数,例如:
container.pagination('go', 8, function(data, pagination){ // template method of yourself })
注意,设置自定义函数后,就不会再调用分页的回调函数
callback
了。disable
:禁用分页,执行后分页不可用,要重新恢复可用需要调用解锁事件container.pagination('enable')
。每次异步翻页发出请求前,会自动调用此方法,请求成功之后会自动调用enable
解锁。enable
:解锁分页,执行后分页恢复可用。show
:显示分页。hide
:隐藏分页。destroy
:销毁分页实例。getSelectedPageNum
:number,获取当前页码。getTotalPage
:number,获取总页数。getSelectedPageData
:array,获取当前页码的数据。isDisabled
:function,当前是否正处在禁用状态。
事件
分页事件的功能接口有 2 种使用方式,分别是回调函数和插件钩子。
使用回调函数:
var container = $('#example1'); container.pagination({ afterRender: function(){ // function body } });
使用插件钩子:
var container = $('#example2'); container.pagination({ dataSource: [1, 2, 3], pageSize: 1 }); container.addHook('afterRender', function(){ // function body });
注意,钩子可以在分页初始化之前定义,也可以在初始化之后定义。
beforeInit
:分页实例初始化之前调用,返回false将阻止初始化。beforeRender
:每次分页时会重新渲染分页条,渲染之前调用。beforePaging
:分页之前调用。beforeDestroy
:分页实例销毁之前调用。beforeDisable
:禁用之前调用。beforeEnable
:解锁之前调用。beforePreviousOnClick
:点击上一页之前调用。beforePageOnClick
:点击页码之前调用。beforeNextOnClick
:点击下一页之前调用。beforeGoInputOnEnter
:分页输入框回车之前调用。beforeGoButtonOnClick
:分页跳转按钮点击之前调用。afterInit
:分页实例初始化创建完成之后调用。afterRender
:每次分页时会重新渲染分页条,渲染之后调用。afterPaging
:分页之后调用。afterDestroy
:分页实例销毁之后调用。afterDisable
:禁用之后调用。afterEnable
:解锁之后调用。afterPreviousOnClick
:点击上一页之后调用。afterPageOnClick
:点击页码之后调用。afterNextOnClick
:点击下一页之后调用。afterGoInputOnEnter
:分页输入框回车之后调用。afterGoButtonOnClick
:分页跳转按钮点击之后调用。afterIsFirstPage
:当前是第一页时调用。afterIsLastPage
:当前是最后一页时调用。
皮肤
分页组件自带了 5 套默认皮肤,但你完全可以定制你自己的皮肤。
例如蓝色皮肤,可以这样使用:
className: 'paginationjs-theme-blue'
小号蓝色皮肤:
className: 'paginationjs-theme-blue paginationjs-small'
大号蓝色皮肤:
className: 'paginationjs-theme-blue paginationjs-big'
如果需要自定义样式,则可以增加CSS类custom-paginationjs
。
配置默认值
Pagination.js分页可通过$.fn.pagination.defaults
对象来修改默认配置,修改后,将影响所有之后创建的实例。例如:
$.extend($.fn.pagination.defaults, { pageSize: 20 })
之后所有新建的分页实例,每页条数都是20。
Pagination.js插件的github地址是:https://github.com/superRaytin/paginationjs