原生js实现分页的效果

news/2024/7/19 13:25:53 标签: js, 分页

想必大家都用过百度查找过我们想要的信息,每次我们查找东西的时候,百度都会返给我们很多很多相似和有关的结果,而这些结果是不可能一页就显示完全的,一般都会分很多很多页,效果图如下。所以我们今天就是要分享一下,这个分页效果是怎么实现的。


百度<a class=分页图" />

首先我们观察这个分页

  1. 一页中显示的页码数是固定的
  2. 当当期页码大于等于2的时候,开始显示‘上一页’按钮,当总页数比当前显示的页码大于等于1的时候,开始显示'下一页'按钮的按钮
  3. 如果我们想要添加‘首页’和‘尾页’按钮的话,那当首页不能在页面显示的时候,添加‘首页’按钮。如果尾页不能显示在页面的时候添加‘尾页’按钮。
  4. 上面的情况确定之后,就是要进行细分的了,分情况进行讨论。首先我们分两大种情况:当页面显示的页数大于等于总页数的时候以及当页面显示的页数小于总页数的时候两种情况。前一种情况比较简单,就不再细说了,主要是当总页数比页面能显示的页数大的时候还要分三种情况:1、当前页的页码小于等于页面中能显示页数的二分之一时2、当前页为最后的几页的时候,以及除了上面两种情况的其他的情况。

文字描述可能有点难懂,所以接下来我们直接上例子,js中有详细的注释方便理解(首先说明,页面中显示的页数为5,至于有多少页如果在实际项目中应该是通过ajax动态获取数据的,然后根据数据的多少自动获得总页数。为了方便理解这里我是用的模拟数据)

HTML代码:

<ul id="ul1"></ul>
<div id="div1">
    <!--<a href="#1">首页</a>
    <a href="#3">上一页</a>
    <a href="#2">[2]</a>
    <a href="#3">[3]</a>
    <a href="#4">4</a>
    <a href="#5">[5]</a>
    <a href="#6">[6]</a>
    <a href="#5">下一页</a>
    <a href="#10">尾页</a>-->
</div>

注释的部分是我们要通过js动态添加的。

CSS代码:

    <style>
        *{ margin:0; padding:0;}
        li{ list-style:none;}
        #ul1{ width:600px; height:250px;}
        #ul1 li{ width:100px; height:100px; background:red; float:left; overflow:hidden; margin:10px;}
        a{ margin:5px;}
    </style>

js代码:

    var json = {
        title : [
            '效果1',
            '效果2',
            '效果3',
            '效果4',
            '效果5',
            '效果6',
            '效果7',
            '效果8',
            '效果9',
            '效果10',
            '效果11',
            '效果12',
            '效果13',
            '效果14',
            '效果15',
            '效果16',
            '效果17',
            '效果18',
            '效果19',
            '效果20',
            '效果21',
            '效果22',
            '效果23',
            '效果24',
            '效果25',
            '效果26',
            '效果27',
            '效果28',
            '效果29',
            '效果30',
            '效果31',
            '效果32',
            '效果33',
            '效果34',
            '效果35',
            '效果36',
            '效果37',
            '效果38',
            '效果39',
            '效果40',
            '效果41',
            '效果42',
            '效果43',
            '效果44',
            '效果45',
            '效果46',
            '效果47',
            '效果48',
            '效果49',
            '效果50',
            '效果51'
        ]
    };

    var arr=[];
    var iNow = 9;
    page({
        id:'div1',
        nowNum:1,
        allNum:Math.floor(json.title.length/10),
        callBack:function(){alert(0)}
    });

    function page(opt){
        if(!opt.id){
            return false;
        }
        var obj = document.getElementById(opt.id);
        var nowNum = opt.nowNum||1;
        var allNum = opt.allNum||5;
        var callBack = opt.callBack||function(){};
        if(nowNum>=4&&allNum>=6){//首页出现的情况,就是当现在的页码大于等于4并且总页码大于等于6时
            var oA = document.createElement('a');
            oA.href = '#1';
            oA.innerHTML = '首页';
            obj.appendChild(oA);
        }
        if(nowNum>=2){//只要页码大于等于2就会出现上一页
            var oA = document.createElement('a');
            oA.href = '#'+(nowNum - 1);
            oA.innerHTML = '上一页';
            obj.appendChild(oA);
        }
        if(allNum<=5){//因为我们让一页最多显示5个页码,所以,如果总页码小与等于5,就说明页码可以显示完全
            for(var i=1;i<=allNum;i++){
                var oA = document.createElement('a');
                oA.href = '#'+i;
                if(nowNum==i){
                    oA.innerHTML = i;
                }else{
                    oA.innerHTML = '['+i+']';
                }
                obj.appendChild(oA);
            }
        }
        else{//下面的情况是当总页码大于5的时候进行的分类
            for(var i=1; i<=5;i++){
                var oA = document.createElement('a');
                if(nowNum == 1||nowNum==2){//在总页数大于5的情况下继续根据当前页进行细分。如果当前的页为1或者为2的时候
                    oA.href = '#'+i;
                    if(nowNum ==i){
                        oA.innerHTML = i;
                    }else{
                        oA.innerHTML = '['+i+']'
                    }
                }else if((allNum - nowNum)==0||(allNum - nowNum)==1){//如果当前页为最后一页或者倒数第二页的时候,说明显示的5页即为最后5页,所以就是下面的公式
                    oA.href = '#'+(allNum - 5+i);
                    if((allNum - nowNum)==0&&i==5){
                        oA.innerHTML = (allNum - 5 + i);
                    }else if((allNum - nowNum)==1&&i==4){
                        oA.innerHTML = (allNum - 5 +i);
                    }else{
                        oA.innerHTML = '['+(allNum - 5 +i)+']'
                    }
                }else{//当前页码处在5个页码的中间的时候
                    oA.href = '#'+(nowNum - 3 +i);
                    if(i==3){
                        oA.innerHTML = (nowNum - 3 + i);
                    }else{
                        oA.innerHTML = '['+(nowNum - 3 +i)+']'
                    }
                }
                obj.appendChild(oA);
            }
        }
        if((allNum - nowNum)>=1){//如果总页数比当前页码大于等于1的时候显示‘下一页’
            var oA = document.createElement('a');
            oA.href = '#'+(nowNum+1);
            oA.innerHTML = '下一页';
            obj.appendChild(oA);
        }
        if((allNum - nowNum)>=3&&allNum>=6){//如果总页数比当前页码大于等于3并且总页码大于等于6的时候显示‘尾页’;
            var oA = document.createElement('a');
            oA.href = '#'+allNum;
            oA.innerHTML = '尾页';
            obj.appendChild(oA);

        }
        callBack(nowNum,allNum);
        var aA = obj.getElementsByTagName('a');
        for(var i=0; i<aA.length;i++){
            aA[i].onclick = function(){
                var nowNum = parseInt(this.getAttribute('href').substring(1));//得到当前的页码数
                obj.innerHTML = '';
                page({
                    id : opt.id,
                    nowNum : nowNum,
                    allNum : allNum,
                    callBack : callBack}

                );
                return false;
            }
        }
    }




http://www.niftyadmin.cn/n/952212.html

相关文章

控制台接收信息转发_一张图告诉你组播报文转发和RPF检查原理

组播转发区别于单播转发&#xff0c;单播转发是基于报文目标IP地址查表转发的过程&#xff0c;而组播转发是根据报文源IP地址查表转发的过程&#xff0c;报文沿远离源的方向转发&#xff0c;可避免环路。PIM协议使用RPF机制确定转发路径。看这张图前&#xff0c;先了解一下RPF的…

深入理解js基本类型和引用类型的区别

1、基本类型&#xff1a;我们知道基本的数据类型有&#xff1a;undefined&#xff0c;boolean&#xff0c;number&#xff0c;string&#xff0c;null.按值访问&#xff0c;可操作保存在变量中的实际的值。基本类型值指的是简单的数据段。基本类型的值是不可变的&#xff1a;在…

终于可以回家了!

今天是春节前工作的最后一天&#xff0c;离下班也没有几个小时了&#xff0c;真块&#xff0c;一年就这样过去了&#xff0c;马上就可以回家了。 转载于:https://www.cnblogs.com/zhangzheny/archive/2007/02/14/650495.html

python语言所使用特殊含义符号的是_智慧职教云课堂品类管理(广东农工商职业技术学院)题库及答案...

【填空题】请缩写以下代码: .box { background-position: 10px 20px; background-repeat: no-repeat; back【判断题】质量管理部门应当参与所有与质量有关的活动,负责审核所有与本规范有关的文件,质量管理部门人员可以将职责委托给其他部门的人员。【判断题】同时具有细菌和真核…

转: 大年三十整理的asp.net资料!(经典)

使用SqlBulkCopy类加载其他源数据到SQL表 在数据回发时&#xff0c;维护ASP.NET Tree控件的位置 vagerent的vs2005网站开发技巧 ASP.NET2.0小技巧&#xff0d;&#xff0d;内部控件权限的实现 图片滚动代码。 css——之三行三列等高布局 Datagird TemplateColumn类型列中…

js面向对象编程详解

什么是面向对象编程&#xff08;OOP&#xff09;&#xff1f; 用对象的思想去写代码&#xff0c;就是面向对象编程 面向对象编程的特点抽象&#xff1a;抓住核心问题&#xff08;把一样的放在一起&#xff09;封装&#xff1a;只能通过对象来访问方法&#xff08;避免乱用代码&…

hash 值重复_从零单排leetcode——基础篇之hash(4):数据适应hash

这一讲的题目有点绕&#xff0c;我们想讲的情景是这样的&#xff1a;在原本的数据结构的基础上&#xff0c;想要直接应用hash有一定难度&#xff0c;这个时候就需要对于原本的数据结构进行一定的处理&#xff0c;重组&#xff0c;换成一种新的形势然后进行hash。这里面最常见的…

转:UML中文FAQ

V1.0 张恂 2003年10月29日 编者按&#xff1a; 一直很难找到中文的、适合国人看的UML FAQ&#xff0c;而英文的UML FAQ往往散落于各处不易收集和消化&#xff0c;导致很多看似简单却很基本、很关键的问题在网络论坛、BBS上被反复地提出&#xff0c;既浪费了提问者、解答者不少的…