现在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. Android------TabLayout的使用

    https://www.jianshu.com/p/2b2bb6be83a8 主要放在 -------> Design库中的TabLayout的使用. margin和padding的区别 外边距 ...

  2. 03_python_基本数据类型

    一.基本数据类型 整数 bool 字符串: 可以保存少量数据并进行相应的操作 列表 list: 存大量数据 [] 元组 tuple: 不可改变的() 字典 dict: 保存键值对,一样可以存储大量的数 ...

  3. PHP正则表达式函数的替代函数

    1,preg_split()函数将字符串按照某元素分割,分割后结果以数组方式返回. php中explode()可以实现此功能.array explode(string $pattern,string ...

  4. Vue.js 和 MVVM 的小细节

    Vue.js 和 MVVM 的小细节 转载 作者:流云诸葛 链接:www.cnblogs.com/lyzg/p/6067766.html MVVM 是Model-View-ViewModel 的缩写, ...

  5. 使用pymysql

    安装 pip3 install pymysql 连接.执行sql.关闭(游标) import pymysql mysql_connect_dict={ 'host':'127.0.0.1', 'por ...

  6. cFSMN和FSMN参数规模对比分析

    1. FSMN参数规模分析        (1)分析前提: 假设隐藏层单元规模都为n 只分析前向t个时刻的结构,即暂时不考虑双向的结构 只分析向量系数编码,即vFSMN,暂时不考虑sFSMN     ...

  7. sql开启远程访问

    我们用的是SQL Server 数据库 2008 版本,数据库配置完之后从另一台电脑访问数据库死活连接不上,提示信息如下 “ 无法连接到 *.*.*.*. 在于SQL Server建立连接时出现与网络 ...

  8. Google地图开发

    配置Google API SDK 如果要想进行Google Map或者说是定位服务的开发,那么肯定需要下载一个新的SDK的支持. 1.点击Android SDK Manager,下载SDK. 2.直接 ...

  9. org.jeecgframework.core.common.exception.MyExceptionHandler]java.lang.NullPointerException

    问题原因:

  10. Python -- 多媒体编程 -- 音乐播放

    使用win32库的WMPlayer.OCX开发一个简易的音乐播放器 import sys from PyQt4 import QtGui, QtCore from win32com.client im ...