Giter Club home page Giter Club logo

pagination.js's Introduction

pagination.js

npm version prettier code style Coverage npm downloads MIT License

pagination.js - 简单好用的 JavaScript 分页导航组件库。

Why pagination.js?

因为最近的一个开发任务需要使用原生 JavaScript 开发的分页组件,但我发现居然没有多少原生 JavaScript 编写的分页组件。那么就直接动手写了 pagination.js。

Features

  • 原生 JavaScript 开发,无任何依赖;
  • 支持 UMD 模块和 ES6 模块;
  • 支持 TypeScript;
  • 支持配置导航按钮布局配置:支持上/下一页导航和数字导航;
  • 数值导航支持快速转到下一组切换;
  • 支持导航主题配置:支持 default、plain 和 bordered 3 种主题;
  • 提供丰富的定义事件订阅:目前提供的事件有 created、mounted、change、refresh、destroy 和 reload;

Install

pagination.js 支持在 Node.js 环境中使用 npm 安装,也可以在浏览器中使用 script 标签引入到页面。

npm install

# install from npmjs.com
npm i -S @yaohaixiao/pagination.js

# install from github.com
npm i -S @yaohaixiao/pagination.js --registry=https://npm.pkg.github.com

script tag

在浏览器中调用 pagination.js,可以选择调用 jsdelivr 提供的 CDN 服务中的文件,也可以使用本地的 .js 文件。

CDN

<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/yaohaixiao/pagination.js/pagination.min.css" />
<script src="https://cdn.jsdelivr.net/gh/yaohaixiao/pagination.js/pagination.min.js"></script>

Local

<link rel="stylesheet" href="/path/to/pagination.min.css" />
<script src="/path/to/pagination.min.js"></script>

Import module

pagination.js 支持以 UMD 模块和 ES6 模块方式导入模块。

// ES6 module
import Pagination from '@yaohaixiao/pagination.js/pagination'

// UMD module
const Pagination = require('@yaohaixiao/pagination.js/pagination.min')

API Documentation

Options

pagination.js 提供了灵活而实用的配置项,以便适应不同的展示方式。

parent

Type: String|Element

  • String: 选择器字符串;
  • HTMLElement: DOM 元素;

必须,parent 参数用来指定显示分页导航组件的 DOM 节点或者选择器字符串。

total

Type: Number

必须,total 参数用来指定分页组件要处理的数据总量,通过它和 size 参数计算出分页导航组件的页面总数量。

import Pagination from '@yaohaixiao/pagination.js/pagination'

const options = Pagination.DEFAULTS

options.parent = '#pagination-container'
options.total = 60

new Pagination(options)

演示地址:https://yaohaixiao.github.io/pagination.js/#section-total

size

Type: Number

Default: 20

可选,size 参数,用来指定每页显示的数据量。用以计算分页导航按钮页数数量。

import Pagination from '@yaohaixiao/pagination.js/pagination'

const options = Pagination.DEFAULTS

options.parent = '#pagination-container'
options.total = 128
// pages = Math.ceil(128/25)
options.size = 25 // 默认值:20

new Pagination(options)

演示地址:https://yaohaixiao.github.io/pagination.js/#section-size

page

Type: Number

Default: 1

可选,page 参数用来控制导航按钮的当前页。

import Pagination from '@yaohaixiao/pagination.js/pagination'

const options = Pagination.DEFAULTS

options.parent = '#pagination-container'
options.total = 128
// 默认选中第5页
options.page = 5 // 默认值:1

new Pagination(options)

演示地址:https://yaohaixiao.github.io/pagination.js/#section-page

limit

Type: Number

Default: 7

可选,limit 参数用来控制导航数字按钮的数量。

import Pagination from '@yaohaixiao/pagination.js/pagination'

const options = Pagination.DEFAULTS

options.parent = '#pagination-container'
options.total = 128
// pages = Math.ceil(128/10)
// 会有 13 页
options.size = 10
// limit = 9,会显示9个数字导航按钮,
// 其中切换到不同页面,会动态计算是否显示快速到上/下一组按钮
options.limit = 9 // 默认值:7,取值范围 5~13

new Pagination(options)

演示地址:https://yaohaixiao.github.io/pagination.js/#section-limit

theme

Type: String

Default: 'default'

可选,theme 参数用来设置导航组件的主题样式。目前支持 default、plain 和 bordered 3 种主题。

default theme
import Pagination from '@yaohaixiao/pagination.js/pagination'

const options = Pagination.DEFAULTS

options.parent = '#pagination-container'
options.total = 128

new Pagination(options)
plain theme
import Pagination from '@yaohaixiao/pagination.js/pagination'

const options = Pagination.DEFAULTS

options.parent = '#pagination-container'
options.total = 128
options.theme = 'plain'

new Pagination(options)
bordered theme
import Pagination from '@yaohaixiao/pagination.js/pagination'

const options = Pagination.DEFAULTS

options.parent = '#pagination-container'
options.total = 128
options.theme = 'bordered'

new Pagination(options)

演示地址:https://yaohaixiao.github.io/pagination.js/#section-theme

align

Type: String

Default: 'default'

可选,align 参数用来指定导航组件的对齐方式。目前支持 justify、left 和 right 3 种主题。

justify
import Pagination from '@yaohaixiao/pagination.js/pagination'

const options = Pagination.DEFAULTS

options.parent = '#pagination-container'
// 默认值,不设置就是 justify 居中对齐
options.align = 'justify'
options.total = 128

new Pagination(options)
left
import Pagination from '@yaohaixiao/pagination.js/pagination'

const options = Pagination.DEFAULTS

options.parent = '#pagination-container'
options.total = 128
options.align = 'left'

new Pagination(options)
right
import Pagination from '@yaohaixiao/pagination.js/pagination'

const options = Pagination.DEFAULTS

options.parent = '#pagination-container'
options.total = 128
options.theme = 'right'

new Pagination(options)

演示地址:https://yaohaixiao.github.io/pagination.js/#section-align

layout

Type: Array

Default: ['prev', 'pager', 'next']

可选,layout 参数用来指定导航按钮布局显示。支持上/下一页导航加数字导航的布局组合显示。

full layout
import Pagination from '@yaohaixiao/pagination.js/pagination'

const options = Pagination.DEFAULTS

options.parent = '#pagination-container'
options.total = 128
options.layout = ['prev', 'pager', 'next']

new Pagination(options)
prev & next layout only
import Pagination from '@yaohaixiao/pagination.js/pagination'

const options = Pagination.DEFAULTS

options.parent = '#pagination-container'
options.total = 128
options.layout = ['prev', 'next']

new Pagination(options)
pager layout only
import Pagination from '@yaohaixiao/pagination.js/pagination'

const options = Pagination.DEFAULTS

options.parent = '#pagination-container'
options.total = 128
options.layout = ['pager']

new Pagination(options)

演示地址:https://yaohaixiao.github.io/pagination.js/#section-layout

disabled

Type: Boolean

Default: false

可选,disabled 参数用来控制分页导航是否可用。

import Pagination from '@yaohaixiao/pagination.js/pagination'

const options = Pagination.DEFAULTS

options.parent = '#pagination-container'
options.total = 128
// pages = Math.ceil(128/10)
// 会有 13 页
options.size = 10
// limit = 9,会显示9个数字导航按钮,
// 其中切换到不同页面,会动态计算是否显示快速到上/下一组按钮
options.disabled = true // 默认值:false

new Pagination(options)

演示地址:https://yaohaixiao.github.io/pagination.js/#section-disabled

Methods

pagination.js 的 API 接口提供的方法如下:

initialize(options)

分页组件的初始化方法。

Parameters
options

Type: Object

(必须)options 指定分页组件初始化需要配置的 options 参数信息。详情参考 Options 参数。

Returns

Type: Any

Pagination 对象,以便实现链式调用。

attr([prop, value])

设置或者获取初始化时配置的 attrs 信息的。

Parameters
prop

Type: String|Object

(可选)attrs 中的属性名称或者要配置的 attrs 信息。

value

Type: Any

(可选)要设置的 prop 属性的值。

  • 不传递任何参数:返回完整的 attrs 配置信息;
  • 仅传递 prop:
    • String: 返回 attrs 配型信息中与 prop 对应的值;
    • Object: 用来设置 attrs 配置信息;
  • 同时传递 prop 和 value 参数:设置 attrs 配置信息中的某个属性值;
Returns

Type: Any

total([count])

设置或者获取分页组件的 total 信息。

Parameters
count

Type: Number

(可选)不传递参数返回总页数,传递 count 参数,更新组件的总页数信息,并调用 refresh() 方法重绘界面。

Returns

Type: Number

返回总页数。

size([size])

设置或者获取分页组件的 size 信息。

Parameters
size

Type: Number

(可选)不传递参数返回每页显示数量,传递 size 参数,更新组件的每页显示数量信息,并调用 refresh() 方法重绘界面。

Returns

Type: Number

返回每页显示数量。

limit([limit])

设置或者获取分页组件的 limit 信息。

Parameters
limit

Type: Number

(可选)不传递参数返回数字导航按钮数量,传递 limit 参数,更新组件的数字导航按钮数量信息,并调用 refresh() 方法重绘界面。

Returns

Type: Number

返回数字导航按钮数量。

pages()

获取分页组件的总页数信息。

Returns

Type: Number

返回总页数数值。

refresh()

更新分页导航 UI 界面。

Returns

Type: Pagination

返回 Pagination 对象,以便实现链式调用。

destroy()

销毁 pagination.js 创建的所有 DOM 元素和与其对应的事件绑定。

Returns

Type: Pagination

返回 Pagination 对象,以便实现链式调用。

reload(options)

程序重启,先执行 destroy() 方法执行程序销毁逻辑,然后重新初始化并重新绘制界面。

Parameters
options

Type: Pagination

(必须)指定重启程序的新的配置信息(参考 DEFAULT 属性)。

Returns

Type: Pagination

返回 Pagination 对象,以便实现链式调用。

Events

pagination.js 提供丰富的定义事件订阅,目前提供的事件有:

  • created - 分页组件完成配置信息初始化时触发;
  • mounted - 分页组件 UI 界面绘制完毕时触发;
  • change - 分页组件的当前页数值发生改变时触发;
  • refresh - 分页组件当前页数值改变后,会重新绘制导航按钮,重新绘制完成时触发;
  • destroy - 销毁分页组件时触发;
  • reload - 调用 reload() 方法,重新初始化并完成 UI 界面绘制后触发;
import Pagination from '@yaohaixiao/pagination.js/pagination'

const $pagination = new Pagination()

$pagination.$on('created', function() {
  console.log('$pagination created', this.attr())
})

$pagination.$on('mounted', function() {
  console.log('$pagination mounted', this.attr())
})

$pagination.$on('change', function(page) {
  console.log('$pagination change', page)
})

$pagination.$on('refresh', function() {
  console.log('$pagination refresh', this.attr())
})

$pagination.$on('destroy', function() {
  console.log('$pagination destroy', this.attr())
})

$pagination.$on('reload', function() {
  console.log('$pagination reload', this.attr())
})

$pagination.initialize({
  parent: '#pagination-nav',
  total: 187,
  page: 5,
  theme: 'bordered',
  layout: ['prev', 'pager', 'next']
})

License

JavaScript Code Licensed under MIT License.

API Documentation Licensed under CC BY 3.0

pagination.js's People

Contributors

yaohaixiao avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.