JavaScript实现列表分页功能特效


Posted in Javascript onMay 15, 2015

最近写了一个js分页的方法,尽管已经有现成的可以用,但还是想自己写写,搞搞清楚。最终实现的效果是:上一页、第一页、…(上n个页码)、n个页码、…(下n个页码)、最后一页、下一页。n可以是奇数也可以是偶数,一般都喜欢取奇数,星石调用的时候传入的参数是5。写的时候,主要注意了以下几个地方:

 页码等于1时,只显示上一页、第一页、最后一页,且都没有跳转;
 页码小于等于2时,不需要中间的n个页码;
 页码小于等于n时,显示所有页码,不显示2个“…”;
 2个“…”换页时,换n个页码,如果接近最前面或最后面几页了,则显示最前面或最后面n个页码。

下面贴出代码,供大家探讨:

//总页数,当前页数,跳转地址,第一页和最后一页之间显示的页码数量
function pageBar(tp,cp,url,pn){
    var str = ‘<ul class=”page”>';
    if(tp>1 && cp>1){
      var prev = cp-1;
      str += ‘<li><a class=”prev” title=”上一页” href=”javascript:goPage(‘+prev+‘,\”+url+‘\');”><span>上一页</span></a></li> ‘;
    }else{
      str += ‘<li><a class=”prev” title=”上一页” href=”javascript:void(0);”><span>上一页</span></a></li> ‘;
    }
    if(tp>1){
      //第一页
      if(cp==1){
        str +=‘<li class=”current”><a href=”javascript:goPage(1,\”+url+‘\');”><span>1</span></a></li> ‘;
      }else{
        str +=‘<li><a href=”javascript:goPage(1,\”+url+‘\');”><span>1</span></a></li> ‘;
      }

      if(tp>2){
        var pnh = Math.floor(pn/2);

        //循环开始页码
        var s = cp-pnh;
        if(s<=1){
          s = 2;
        }

        //循环结束页码
        var e = cp+pnh;
        if(e>=tp){
          e = tp-1;
        }

        if(s<=(1+pnh)){
          if(tp>(pn+2)){
            e = s+(pn-1);
            if(e>=tp){
              e = tp-1;
            }
          }else{
            s = 2;
          }
        }

        if(e>=(tp-pnh)){
          if(tp>(pn+2)){
            s = e-(pn-1);
            if(s<=1){
              s = 2;
            }
          }else{
            e = tp-1;
          }
        }

        if(e<s){
          e = s;
        }

        //第一页后的多页跳转
        if(s>2){
          var sp = cp-pn;
          if(sp<1){
            sp=1;
          }
          str += ‘<li><a name=”break” href=”javascript:goPage(‘+sp+‘,\”+url+‘\');”><span>…</span></a></li> ‘;
        }

        for(var i=s;i<=e;i++){
          if(i==cp){
            str += ‘<li class=”current”><a href=”javascript:goPage(‘+i+‘,\”+url+‘\');”><span>'+i+‘</span></a></li> ‘;
          }else{
            str += ‘<li><a href=”javascript:goPage(‘+i+‘,\”+url+‘\');”><span>'+i+‘</span></a></li> ‘;
          }
        }

        //最后一页前的多页跳转
        if(e < (tp-1)){
          var ep = cp+pn;
          if(ep>tp){
            ep=tp;
          }
          str += ‘<li><a name=”break” href=”javascript:goPage(‘+ep+‘,\”+url+‘\');”><span>…</span></a></li> ‘;
        }
      }

      //最后一页
      if(cp==tp){
        str +=‘<li class=”current”><a href=”javascript:goPage(‘+tp+‘,\”+url+‘\');”><span>'+tp+‘</span></a></li> ‘;
      }else{
        str +=‘<li><a href=”javascript:goPage(‘+tp+‘,\”+url+‘\');”><span>'+tp+‘</span></a></li> ‘;
      }

    }else{
      str +=‘ <li class=”current”><a href=”javascript:void(0);”><span>1</span></a></li> ‘;
    }

    if(tp>1 && cp<tp){
      var next = cp+1;
      str += ‘<li><a class=”next” title=”下一页” href=”javascript:goPage(‘+next+‘,\”+url+‘\');”><span>下一页</span></a></li>';
    }else{
      str += ‘<li><a class=”next” title=”下一页” href=”javascript:void(0);”><span>下一页</span></a></li>';
    }
    str += ‘</ul>';
    return str;
  }

  //跳转页码,跳转地址
  function goPage(cp,url){
    window.location.href = url+cp;
  }

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
Nov 21 Javascript
JS控制日期显示的小例子
Nov 23 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
Sep 04 Javascript
浅谈使用MVC模式进行JavaScript程序开发
Nov 10 Javascript
javascript的理解及经典案例分析
May 20 Javascript
jQuery仿IOS弹出框插件
Feb 18 Javascript
JavaScript用二分法查找数据的实例代码
Jun 17 Javascript
vue插件vue-resource的使用笔记(小结)
Aug 04 Javascript
node实现的爬虫功能示例
May 04 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
Jun 11 Javascript
Vue路由切换页面不更新问题解决方案
Jul 10 Javascript
详解vue实现坐标拾取器功能示例
Nov 18 Vue.js
基于jQuery插件实现环形图标菜单旋转切换特效
May 15 #Javascript
js生成验证码并直接在前端判断
May 15 #Javascript
javascript实现表格增删改操作实例详解
May 15 #Javascript
javascript实现可全选、反选及删除表格的方法
May 15 #Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
May 15 #Javascript
javascript实现Table排序的方法
May 15 #Javascript
Javascript动态创建表格及删除行列的方法
May 15 #Javascript
You might like
PHP如何透过ODBC来存取数据库
2006/10/09 PHP
支持oicq头像的留言簿(一)
2006/10/09 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
HR vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
2012/07/26 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
Javascript实现飞动广告效果的方法
2015/05/25 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
Node.js检测端口(port)是否被占用的简单示例
2016/09/29 Javascript
web打印小结
2017/01/11 Javascript
vue如何在自定义组件中使用v-model
2018/05/14 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
利用Electron简单撸一个Markdown编辑器的方法
2019/06/10 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
2020/11/12 Javascript
JavaScript实现音乐导航效果
2020/11/19 Javascript
基于jQuery拖拽事件的封装
2020/11/29 jQuery
Django URL传递参数的方法总结
2016/08/28 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
2018/03/23 Python
python中的不可变数据类型与可变数据类型详解
2018/09/16 Python
详解Python中的分支和循环结构
2020/02/11 Python
Python基于smtplib协议实现发送邮件
2020/06/03 Python
英国足球店:UK Soccer Shop
2017/11/19 全球购物
智能旅行箱:Horizn Studios
2018/04/30 全球购物
Keds加拿大官网:购买帆布运动鞋和皮鞋
2019/09/26 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
汽车维修专业自荐书
2014/05/26 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
户外活动总结
2015/02/04 职场文书
2015年城管个人工作总结
2015/05/15 职场文书
黄埔军校观后感
2015/06/10 职场文书
天河观后感
2015/06/11 职场文书
2015秋季田径运动会广播稿
2015/08/19 职场文书