现在web注重用户体验与交互性,ajax 提交数据的方式很早就流行了,它能够在不刷新网页的情况下局部刷新数据。前端分页多是用ajax请求数据(其他方式也有比如手动构造表单模拟提交事件等)。通过js将查询参数构造好发向后台,后台处理后以特定的格式返回,多为json,比较流行处理起来也很方便。当后台数据到达后,浏览器重新渲染界面当然也包括js分页控件,如果觉得每次绘制分页控件对前端性能有影响也可以不绘制,但实现起来相对麻烦。

本人写的分页控件参考了其他网友的代码,链接忘了,控件接受四个参数或一个对象,其实是一样的对于后者只不过将四个参数放在一个对象中。pIndex:每次请求的页码,pSize:每次请求的页容量,container: 放分页控件的容器,fn:如何向服务器请求数据

代码中主要用到了闭包,将上一次的请求信息保存起来,以备下次使用,虽然代码可以直接拿来用但是样式不是通用的,需要每次调样式还好样式比较简单。

 function pagination(obj){
/*pageIndex: index,
pageSize: size,
count: count,
container: container,
fn : fn
*/
if(!obj||typeof obj!="object"){
return false;
}
var pageIndex= obj.pageIndex||1,
pageSize=obj.pageSize||10,
count= obj.count||0,
container= obj.container,
callback=obj.fn||function(){};
var pageCount =Math.ceil(count/pageSize);
if(pageCount==0){
return false ;
}
if(pageCount<pageIndex){
return false;
}
/*事件绑定*/
function bindEvent(){
//上一页事件
$(container).find(">ul>.pg-prev").unbind("click").bind("click",function(){
if(pageIndex <=1){
return false ;
}
if(typeof callback=="function"){
pageIndex--;
pageIndex = pageIndex<1?1:pageIndex;
obj.pageIndex= pageIndex;
callback(pageIndex);
pagination(obj);
}
});
//下一页事件
$(container).find(">ul>.pg-next").unbind("click").bind("click",function(){
if(pageIndex ==pageCount){
return false ;
}
if(typeof callback=="function"){
pageIndex++;
pageIndex =pageIndex >pageCount?pageCount:pageIndex;
obj.pageIndex= pageIndex;
callback(pageIndex);
pagination(obj);
}
});
$(container).find(">ul>li:not(.pg-more):not(.pg-prev):not(.pg-next)").unbind("click").bind("click",function(){
pageIndex= +$(this).html();
pageIndex = isNaN(pageIndex)?1:pageIndex;
obj.pageIndex= pageIndex;
if(typeof callback=="function"){
callback(pageIndex);
pagination(obj);
}
});
}; /*画样式*/
function printHead(){
var html=[];
html.push('<li class="pg-prev '+(pageIndex==1?"pg-disabled":"")+'">上一页</li>');
return html.join("");
}
function printBody(){
var html=[];
var render=function(num,start){
start=start||1;
for(var i=start;i<=num;i++){
html.push('<li class="'+(pageIndex==i?"pg-on":"")+'">'+i+'</li>');
}
}
if(pageCount<=7){
render(pageCount);
}else{
if(pageIndex <4){
render(4);
html.push('<li class="pg-more">...</li>');
html.push('<li >'+pageCount+'</li>');
}else{
html.push('<li >1</li>');
html.push('<li class="pg-more">...</li>');
if(pageCount-pageIndex>3){
render(pageIndex+1,pageIndex-1);
html.push('<li class="pg-more">...</li>');
html.push('<li >'+pageCount+'</li>');
}else{
render(pageCount,pageCount-3);
}
}
}
return html.join("");
}
function printTail(){
var html=[];
html.push('<li class="pg-next '+(pageIndex==pageCount?"pg-disabled":"")+'">下一页</li>');
return html.join("");
}
function show(){
container.innerHTML= '<ul>'+printHead()+printBody()+printTail()+'</ul>';
}
show();
bindEvent();
}

js 前端分页空间控件的更多相关文章

  1. Js表单验证控件-02 Ajax验证

    在<Js表单验证控件(使用方便,无需编码)-01使用说明>中,写了Verify.js验证控件的基本用法,基本可以满足大多数验证需求,如果涉及服务端的验证,则可以通过Ajax. Ajax验证 ...

  2. jquery分页展示控件:kkpager

    kkpager v1.2 js分页展示控件,传入简单参数就能使用的分页效果控件 准备工作,引入js.css <script type="text/javascript" sr ...

  3. JS与APP原生控件交互

    "热更新"."热部署"相信对于混合式开发的童鞋一定不陌生,那么APP怎么避免每次升级都要在APP应用商店发布呢?这里就用到了混合式开发的概念,对于电商网站尤其显 ...

  4. [js开源组件开发]js多选日期控件

    js多选日期控件 详情请见:http://www.lovewebgames.com/jsmodule/calendar.html 它的github地址:https://github.com/tianx ...

  5. js前端分页之jQuery

    锋利的js前端分页之jQuery 大家在作分页时,多数是在后台返回一个导航条的html字符串,其实在前端用js也很好实现. 调用pager方法,输入参数,会返回一个导航条的html字符串.方法的内部比 ...

  6. js插件---Bootstrap 树控件

    js插件---Bootstrap 树控件 一.总结 一句话总结:可以直接用gojs,或者搜索js,jquery的树控件,或者bootstrap树控件,一大堆 gojs 二.JS组件系列——Bootst ...

  7. 开发类似"音速启动"的原创工具简码"万能助手"的过程中对ztree.js与win标准控件treeview、HTMLayout树形框等优缺点的比较

    在开发类似"音速启动"的桌面快捷方式管理软件简码"万能助手"的早期规划中,曾经考虑过几种树形框方案: ztree.js.win标准控件treeview.HTML ...

  8. js进阶 9-10 html控件如何实现点击自动选择控件内容

    js进阶 9-10  html控件如何实现点击自动选择控件内容 一.总结 一句话总结: 1.在click事件中,如果focus,那就select 2.blur 1.html中控件添加两种方式? 在表单 ...

  9. js进阶 9-9 html控件如何实现回车键切换焦点

    js进阶 9-9 html控件如何实现回车键切换焦点 一.总结 一句话总结:在onkeydown事件中判断event对象的键位码,然后focus事件. 二.js进阶 9-9 html控件如何实现回车键 ...

随机推荐

  1. tensorflow 安装命令

    sudo pip install --upgrade --ignore-installed six tensorflow-0.9.0-py2-none-any.whl

  2. JS原生事件处理(跨浏览器)

    一.关于获取事件对象 FF有点倔强,只支持arguments[0],不支持window.event.这次真的不怪IE,虽然把event作为window的属性不合规范,但大家都已经默许这个小问题存在了, ...

  3. VS2017+EF+Mysql生成实体数据模型(解决闪退的坑) 版本对应才行

    最近要使用VS2017+EF+Mysql,在生成实体数据模型踏过一些坑,在此做个总结. 1.先下载并安装 mysql-connector-net-6.9.10.msi  和  mysql-for-vi ...

  4. python--Websocket实现, 加密 sha1,base64

    需要用到gevent-websocket包,这里我们用下图这个 一.websocket简单实现 ep1.py from geventwebsocket.handler import WebSocket ...

  5. 给Ubuntu18.04安装mac os主题<转载>

     给Ubuntu18.04安装mac os主题 转载来自 https://www.cnblogs.com/feipeng8848(作者) 参考文献 https://linuxhint.com/gnom ...

  6. iOS-项目开发1-图片浏览器

    FFBrowserImageViewController 自定义的图片浏览器:支持图片双击放大,单击取消,拖动取消. 重点: 1:在iOS11之后再布局是要将UIScrollViewContentIn ...

  7. Shell - 简明Shell入门11 - 调用脚本(CallTheScript)

    示例脚本及注释 主脚本: CallTheScript.sh #!/bin/bash . ./11-subscript.sh # 调用其他脚本;注意点号"."和文件路径之间有一空格; ...

  8. 并发上下文控制包Context

    Context,是golang用来控制并发流程的库,它能方便的将主控程序的停止信号传递到goroutinue中,从而实现一键中止关联goroutinue的执行,除此之外,它还能将外部变量通过Value ...

  9. POJ 2685

    #include <iostream> #include <string> #define MAXN 26 using namespace std; int _map[MAXN ...

  10. Celery启动Django项目:Client sent AUTH, but no password is set 错误处理

    celery -A CeleryTest worker -l info [2017-02-22 07:26:52,666: ERROR/MainProcess] consumer: Cannot co ...