安装与调用
本分页组件可以单独作为插件使用。
引用下面的 CSS 和 JS:
<link rel="stylesheet" href="https://qidian.gtimg.com/lulu/hope/ui/Pagination/index.css">
<script type="module" src="https://qidian.gtimg.com/lulu/hope/ui/Pagination/index.js"></script>
也可采用如下方式进行引用:
<script type="module"> import 'https://qidian.gtimg.com/lulu/hope/ui/Pagination/index.js'; </script>
概述
Pagination 组件支持三种使用方式,分别是:
- 使用自定义元素
<ui-pagination>
(推荐); - 普通元素上设置
is-pagination
属性; - 传统的
new Pagination()
构造语法。
ui-pagination 自定义元素
基本的效果和使用
无需初始化,直接使用自定义的 <ui-pagination>
元素即可。
<ui-pagination total="100" per="8"></ui-pagination>
支持total
,current
,per
,mode
,href
这 5 个自定义属性。
如果需要监听页码监听事件,可以通过 addEventListener 进行绑定:
var elePagination = document.querySelector('ui-pagination'); elePagination.addEventListener('change', function (ev) { console.log(this.current); console.log(ev.target.current); console.log(ev.detail.current); });
短分页
设置 mode="short"
会表现为短分页。
<ui-pagination total="100" current="5" per="10" mode="short"></ui-pagination>
属性值修改与同步测试
当需要改变分页的总数,或者每一页的条数的时候,直接设置对应的属性值即可,例如点击某按钮,修改某分页的总数为 200。
<ui-pagination total="100" per="10" current="5"></ui-pagination>
button.addEventListener('click', function () { pagination.total = 200; });
DOM 插入与渲染测试
测试代码如下所示。
button.addEventListener('click', function () { this.parentElement.insertAdjacentHTML('afterend', '<ui-pagination total="66" ></ui-pagination>'); });
is-pagination 快捷语法
本 Pagination 组件支持在原生 HTML 元素上添加 is-pagination
属性实现分页效果。使用示意:
<div is-pagination data-total="200" data-per="10"></div>
is-pagination
快捷语法支持自定义其他参数,均使用data-*
语法进行设置,例如支持data-current
、data-per
、data-total
、data-loading
、data-href
等属性。
<div is-pagination data-total="200" data-per="15" data-current="3" ></div>
下面测试下直接插入一段包含 is-pagination
属性的 HTML 代码,看看分页效果是不是正常出现。
button.addEventListener('click', function (event) { ispx.innerHTML = '<div is-pagination data-total="200" data-per="10"><div>' });
如需获取分页属性,采用常规 dataset 方式即可,例如
// 获取当前页 pagination.dataset.current // 获取总页数 pagination.dataset.total
new Pagination() 语法
可以采用传统的构造语法来创建一个分页组件,例如:
var pagination = new Pagination({ current: 3, total: 200, per: 10, // 需要插入的容器,不传则不渲染到页面(即存在内存中) container: document.querySelector('#pagination') })
返回的 pagination 即为分页组件的dom节点 <ui-pagination></ui-pagination>
,可通过 .total
等操作,修改分页的总数。
button.addEventListener('click', function () { // pagination 为 new Pagination 返回 pagination.total = 300; });
参数说明
支持的参数如下表所示,无论哪种语法,都可以参考下表。
属性名称 | 支持类型 | 默认值 | 释义 |
---|---|---|---|
total | Number | 0 | 总数据量。默认长度为0。注意,是数据条目总数,不是分页总数。 |
current | Number | 1 | 当前页码数。默认是选中第1页。 |
per | Number | 15 | 每页显示的条目数。 |
mode | String | long | 分页的类别。目前支持的参数有:long 和short |
href | String | java |
可点击分页项的href 值,默认是javascript: 。
支持 |
loading | Boolean | false | 是否正在加载,当设置为true 时,当前页码会出现loading |
ele.pagination() 方法
语法如下:
element.pagination(options);
使用示意:
<div id="pg1" data-total="234"></div>
pg1.pagination({ per: 20 });
无论是 new 构造语法、还是 is-pagination
快捷语法,亦或者是这里的 pagination()
方法,如果想要修改分页的总数,或者每页的数量,则直接设置data-total
、data-per
等属性是无效的,因为普通 HTML 元素上的这些属性并没有加入检测,此时应该找到底层的自定义元素进行设置,方法如下:
dom['ui-pagination'].total = 123;
分页组件实例
基本效果和使用
修改下面的一些数值,预览分页效果:
总数据量:
每页数目:
// 下拉或者输入框值改变后 eleInputPer.addEventListener('change', function () { page2.per = this.value; page1.per = this.value; }); eleInputTotal.addEventListener('change', function () { page2.total = this.value; page1.total = this.value; });
普通链接地址的分页
HTML代码如下:
<ui-pagination total="100" per="8" href="?pageid=${current}"></ui-pagination>
加载状态
常用于 ajax 异步加载内容,语法是设置 loading 属性值为 true 或 false。
// 监听change事件即可 pagination.addEventListener('change', function () { pagination.loading = true; // 这里用定时器模拟ajax请求 setTimeout( function(){ // 其他业务逻辑 pagination.loading = false; }, 1000) });
本页贡献者:
xboxyan, zhangxinxu