Skip to content

分页生成器 [WIP] ​

当数据量过多时,使用分页生成器动态分解数据。

综合用法 ​

html
<div id="pagerExample1"></div>
<div id="pagerExample2"></div>
<div id="pagerExample3"></div>

<script>
    new zui.Pager('#pagerExample1', {
        items: [
            {type: 'info', text: '共 {recTotal} 项'},
            {type: 'size-menu', text: '每页 {recPerPage} 项', dropdown: {placement: 'top'}},
            {type: 'link', page: 'first', icon: 'icon-double-angle-left', hint: '第一页'},
            {type: 'link', page: 'prev', icon: 'icon-angle-left', hint: '上一页'},
            {type: 'info', text: '{page}/{pageTotal}'},
            {type: 'link', page: 'next', icon: 'icon-angle-right', hint: '下一页'},
            {type: 'link', page: 'last', icon: 'icon-double-angle-right', hint: '最后一页'},
        ],
        page: 2,
        recTotal: 101,
        recPerPage: 10,
        linkCreator: '#?page={page}&recPerPage={recPerPage}',
        onClickItem: (info) => {
            console.log('> pagerExample1.onClickItem', info);
        },
    });
    new zui.Pager('#pagerExample2', {
        items: [
            {type: 'info', text: '共 {recTotal} 项'},
            {type: 'size-menu', text: '每页 {recPerPage} 项', dropdown: {placement: 'top'}},
            {type: 'link', page: 'first', icon: 'icon-double-angle-left', hint: '第一页'},
            {type: 'link', page: 'prev', icon: 'icon-angle-left', hint: '上一页'},
            {type: 'nav', count: 6},
            {type: 'link', page: 'next', icon: 'icon-angle-right', hint: '下一页'},
            {type: 'link', page: 'last', icon: 'icon-double-angle-right', hint: '最后一页'},
            {type: 'goto', text: '跳转'},
        ],
        page: 2,
        recTotal: 51,
        recPerPage: 10,
        linkCreator: '#?page={page}&recPerPage={recPerPage}',
        onClickItem: (info) => {
            if (info.item.type !== 'nav') {
                return;
            }
            const fElement = info.event.target.closest('.pager');
            const btns = fElement.querySelectorAll('.pager-nav');
            btns.forEach(element => {
                element.classList.remove('active');
            });
            info.event.target.classList.add('active');
        },
    });
    new zui.Pager('#pagerExample3', {
        items: [
            {type: 'info', text: '共 {recTotal} 项'},
            {type: 'link', page: 'prev', icon: 'icon-angle-left', hint: '上一页'},
            {type: 'nav'},
            {type: 'link', page: 'next', icon: 'icon-angle-right', hint: '下一页'},
        ],
        page: 2,
        recTotal: 51,
        recPerPage: 10,
        linkCreator: '#?page={page}&recPerPage={recPerPage}',
        onClickItem: (info) => {
            if (info.item.type !== 'nav') {
                return;
            }
            const fElement = info.event.target.closest('.pager');
            const classList = ['text-canvas', 'bg-primary'];
            const btns = fElement.querySelectorAll('.pager-nav');
            btns.forEach(element => {
                element.classList.remove(...classList);
            });
            info.event.target.classList.add(...classList);
        },
    });

</script>

简单分页 ​

大于 6 页时的效果:

html
<div id="pagerAllCount"></div>
<div id="pagerMaxCount"></div>

<script>
    new zui.Pager('#pagerAllCount', {
        items: [
            {type: 'link', page: 'prev', icon: 'icon-angle-left', hint: '上一页'},
            {type: 'nav'},
            // ...
            onClickItem: (info) => {
                if (info.item.type !== 'nav') {
                    return;
                }
                const fElement = info.event.target.closest('.pager');
                const btns = fElement.querySelectorAll('.pager-nav');
                btns.forEach(element => {
                    element.classList.remove('active');
                });
                info.event.target.classList.add('active');
            },
        ],
        // ...
    });
    new zui.Pager('#pagerMaxCount', {
        items: [
            {type: 'link', page: 'prev', icon: 'icon-angle-left', hint: '上一页'},
            {type: 'nav', count: 6},
            // ...
        ],
        // ...
    });
</script>

跳转到 ​

html
<div id="pagerGoto"></div>

<script>
    new zui.Pager('#pagerGoto', {
        items: [
            {type: 'link', page: 'prev', icon: 'icon-angle-left', hint: '上一页'},
            {type: 'info', text: '{page}/{pageTotal}'},
            {type: 'link', page: 'next', icon: 'icon-angle-right', hint: '下一页'},
            {type: 'goto', text: '跳转'},
        ],
        page: 2,
        recTotal: 101,
        recPerPage: 10,
        linkCreator: '#?page={page}&recPerPage={recPerPage}',
        onClickItem: (info) => {
            console.log(info);
        },
    });
</script>

外观 ​

结合CSS工具类实现不同类型的分页外观

html
<script>
    new zui.Pager('#pagerNav1', {
        btnProps: {btnType: 'border'},
        // ...
        onClickItem: (info) => {
            if (info.item.type !== 'nav') {
                return;
            }
            const fElement = info.event.target.closest('.pager');
            const btns = fElement.querySelectorAll('.pager-nav');
            btns.forEach(element => {
                element.classList.remove('active');
            });
            info.event.target.classList.add('active');
        },
    });
</script>

引入 ​

通过npm ​

js
import {Pager} from 'zui/pager';
const contextMenu = new Pager(element, options);

通过全局对象 ​

js
const pager = new zui.Pager(element, options);

使用React 组件 ​

js
import {render} from 'react';
import {Pager} from 'zui/pager/react';

render(element, <Pager {...options} />);

使用Jquery 扩展 ​

js
$(element).pager(options);

const pager = $(element).data('zui.pager');

选项 ​

linkCreator ​

导航链接生成器,点击页码时进行页面地址更换。

  • 类型:string | ((info: PagerInfo) => string)
  • 必选:否

page ​

初始状态的当前页码。

  • 类型:number。

recTotal ​

总记录数目。

  • 类型:number。

recPerPage ​

每页记录数。

  • 类型:number。

pageTotal ​

总页数。

  • 类型:number。

items ​

定义分页项的列表,可以通过一个函数动态返回分页组件。

基于 工具栏 选项 和 自定义 PagerItemOptions 选项。

onClickItem ​

指定分页按钮的点击回调事件。

API ​

PagerInfo ​

参数:

page ​

  • 含义:初始状态的当前页码;
  • 类型:number。

recTotal ​

  • 含义:总记录数目;
  • 类型:number。

recPerPage ​

  • 含义:每页记录数;
  • 类型:number。

pageTotal ​

  • 含义:总页数;
  • 类型:number。

PagerItemOptions ​

参数:

type ​

  • 含义:子项类型;
  • 类型:string;
  • 可选项:info | link | nav | size-menu | goto。

page ​

  • 含义:页码名称;
  • 类型:'first' | 'last' | 'prev' | 'next' | 'current' | number。

text ​

  • 含义:指定类型为 info | size-menu 的显示文案;
  • 类型:string | ((info: PagerInfo) => string)。

count ​

  • 含义:指定类型为 nav 的展示数量;
  • 类型:number。

format ​

  • 含义:指定类型为 link | nav 的显示格式;
  • 类型:string | ((info: PagerInfo) => string)。
  • 含义:指定下拉菜单的属性;
  • 类型:object。

items ​

  • 含义:指定类型为 size-menu 下拉菜单里的选项;
  • 类型:number[]。

MIT License (MIT)