原文:js页码生成库,一个适合前后端分离的页码生成器

前言

上星期写的任务里面有需要进行分页的处理,git搜索了一番,没有觉得合适的,于是自己临时写了个分页的算法。

然后等闲下来的时候,决定把分页进行优化并推广。于是乎,一个适合前后端分离的页码生成器就这样出来了。

先别废话了,直接上 git 地址demo 地址。看官果断点击进去瞧瞧看。项目主页的 readme 文档的自动排版将更好。

先讲讲设计思想

整个开发流程围绕事件绑定进行开发。

脱离 callback 回调这种回调方法,直接使用 事件 方式触发换页前后的动作,方便解耦。

既然使用这种方式进行回调,就使用全局变量挂载分页的数据,方便回调时候进行分页数据的访问。

库的依赖

由于开发库的时候,并没有使用原生的语法进行元素或者事件绑定的操作,因此需要依赖某个库。

现阶段,经过测试支持 zepto 以及 jquery (二选一)。

css 方面,建议还是直接自己写或者使用 bootstrap 的库,源代码里面有从 bootstrap 里面抽出来的分页 css 代码。

简洁demo

由于分页就必须知道分页数据大小,因此必须传输配置对象。

var pageConfig = {
// 每页显示的数据长度,必填,而且 >1
prePageLenght: 10,
// 数据的总长度,必填,而且 >1
dataLength: 30,
// 现在的页码,默认 1
pageNow: 1,
// 渲染分页 html 的容器,一般框架的容器即可
renderBox: $('.pagination-box')
};

配置之后,进行调用

// 运行即可分页
pageBuilder(pageConfig);

这样子就能进行分页了。

回调的书写

回调的书写虽然放在了调用分页的主函数后面,但是记得在调用分页之前就定义这些事件,因为一旦调用分页函数,就马上触发分页回调,写在后面了,就会忘记了刚分页时候的事件回调了。

首先是分页前的回调,分页之前会触发 window 下面一个自定义分页之前的事件 beforePageChange ,因此要触发处理分页前的动作,就这样处理:

// 提前定义好分页之前的动作,可选
$(window).on('beforePageChange', function() {
// callback
// todo
// 获取当前页码,可以从 pageBuilder.page.pageNow 取得,注意此时的值为未分页之前的旧页码。
})

同样道理,分页之后的回调差不多:

// 提前定义好分页之后的动作,可选
$(window).on('afterPageChange', function() {
// callback
// todo
// 获取当前页码,可以从 pageBuilder.page.pageNow 取得
})

特别说明

一个页面只适合使用一个分页实例。分页的动作将在 hashchange 触发之后进行分页。

里面监控页码变化的函数:

    // 绑定换页的事件
$(window).on('hashchange', function() {
var hash = location.hash;
var pageTemp = 0;
if (/^#page=\d+$/.test(hash) === true) {
// 直接是页码的
pageTemp = hash.substring(6) | 0;
if (defaultConfig.pageNow !== pageTemp) {
defaultConfig.pageNow = pageTemp;
$(window).trigger("renderPagination");
} } else if (hash === "#page=next") {
// 下一页的
location.hash = "page=" + ( defaultConfig.pageNow + 1 );
} else if (hash === "#page=prev") {
// 上一页的
location.hash = "page=" + ( defaultConfig.pageNow - 1 );
}
})

因为 hashchange 只支持 IE8+,

所以,该插件只适合 IE8+,甚至IE8的怪异模式不支持 hashchange 事件。

结束语

这个库还有很多可以优化的地方,例如页码缓存,还有作用域优化之类的,还没进行优化。

希望大家喜欢。喜欢的话,点个推荐吧,如果使用上了,记得 star 下哦。

js页码生成库,一个适合前后端分离的页码生成器的更多相关文章

  1. Vue.js (Frontend & Backend)尝试前后端分离

    前言 前端用什么框架都可以,这里选择小巧的vuejs. 要实现的功能很简单:1.登录功能,成功将服务器返回的token存在本地2.使用带token的header访问服务器的一个资源 本次实验环境: & ...

  2. [原创]基于VueJs的前后端分离框架搭建之完全攻略

    首先请原谅本文标题取的有点大,但并非为了哗众取宠.本文取这个标题主要有3个原因,这也是写作本文的初衷: (1)目前国内几乎搜索不到全面讲解如何搭建前后端分离框架的文章,讲前后端分离框架思想的就更少了, ...

  3. 在centos7.6上部署前后端分离项目Nginx反向代理vue.js2.6+Tornado5.1.1,使用supervisor统一管理服务

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_102 这一次使用vue.js+tornado的组合来部署前后端分离的web项目,vue.js不用说了,前端当红炸子鸡,泛用性非常广 ...

  4. 前后端分离之vue2.0+webpack2 实战项目 -- html模板拼接

    对于前后端分离,如何把一个页面的公共部分比如head, header, footer, content等组合成一个完整的html 是一个值得考虑的地方. 对于php,我们可以利用include加载其他 ...

  5. 前后端分离构架 与 json ajax简介

    前后端分离 传统开发方式 曾几何时,JSP和Servlet为Java带来了无限风光,一时间大红大紫,但随着互联网的不断发展,这样的开发方式逐渐显露其弊端,在移动互联网炙手可热的今天,应用程序对于后台服 ...

  6. 一个Java程序猿眼中的前后端分离以及Vue.js入门

    松哥的书里边,其实有涉及到 Vue,但是并没有详细说过,原因很简单,Vue 的资料都是中文的,把 Vue.js 官网的资料从头到尾浏览一遍该懂的基本就懂了,个人感觉这个是最好的 Vue.js 学习资料 ...

  7. 【手摸手,带你搭建前后端分离商城系统】01 搭建基本代码框架、生成一个基本API

    [手摸手,带你搭建前后端分离商城系统]01 搭建基本代码框架.生成一个基本API 通过本教程的学习,将带你从零搭建一个商城系统. 当然,这个商城涵盖了很多流行的知识点和技术核心 我可以学习到什么? S ...

  8. 【开源.NET】 分享一个前后端分离的轻量级内容管理框架

    开发框架要考虑的面太多了:安全.稳定.性能.效率.扩展.整洁,还要经得起实践的考验,从零开发一个可用的框架,是很耗时费神的工作.网上很多开源的框架,为何还要自己开发?我是基于以下两点: 没找到合适的: ...

  9. 前后端分离(手)-- 使用mock.js(好样的)

    ## 前言: 本篇博文昨天七夕写的,一天下来被虐得体无完肤,苦逼的单身狗只能学习,对!我爱学习,关掉朋友圈,并写了一篇博文发泄发泄.这次写mock.js的使用,能使前后端分离,分离,分离,重要的是说三 ...

随机推荐

  1. Android_Training

    http://wiki.eoeandroid.com/Android_Training Android小白成长之0基础篇

  2. tornado的GET POST方法样品展示

    举例说明get和post该方法的用途: 一.演示样例用的GET方法: import tornado.ioloop import tornado.web class MainHandler(tornad ...

  3. 泛泰A820L (高通公司MSM8660 cpu) 3.4内核CM10.1(Android 4.2.2) 测试版第二版

    欢迎关注泛泰非盈利专业第三方开发团队 VegaDevTeam  (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo cr ...

  4. ACM字符串处理算法经典:字符串搜索

    语法:result=strfind(char str[],char key[]); 参数: str[]:在这个源字符串查找操作 key[]:搜索字符串.不能为空字符串 回报值:     假设查找成功. ...

  5. Java多线程中wait, notify and notifyAll的使用

    本文为翻译文章,原文地址:http://www.journaldev.com/1037/java-thread-wait-notify-and-notifyall-example 在Java的Obje ...

  6. 离robots.txt启动网络爬虫之旅

    要成为一个网络爬虫或搜索引擎(在这里,共同蜘蛛)它不会陌生,在搜索引擎爬虫的第一个文件或者访问该网站上浏览robots.txt该.robots.txt文件讲述了蜘蛛server哪些文件要观看正在. 当 ...

  7. 基于低压电力采集平台DW710C的基础开发

    实验课题 (1)自己定义通信规约,採用java或C++编写简单的PC端上位机软件,实现採集器与PC机的通信.实验可在DW710C-PCproject下进行. (2)实现LCD显示字符.数字.汉字和简单 ...

  8. In Oracle 11g, how to change the order of the results of a sql without “order by”?(转)

    oracle 11g 当sql语句中不加order by的时候,好像是按rowid的顺序返回结果的.我也看过一些相关的文档,oracle的官方意思就是不加order by,就不保证输出的顺序. 那么, ...

  9. Cocos2d-x3.0 RenderTexture(一) 保存

    .h #include "cocos2d.h" #include "cocos-ext.h" #include "ui/CocosGUI.h" ...

  10. Android批量图片加载经典系列——使用二级缓存、异步网络负载形象

    一.问题描写叙述 Android应用中常常涉及从网络中载入大量图片,为提升载入速度和效率,降低网络流量都会採用二级缓存和异步载入机制.所谓二级缓存就是通过先从内存中获取.再从文件里获取,最后才会訪问网 ...