• 前端页面的分页,jq源码实现


    各位大佬们好,今天刚加入博客园,希望与大家一起共同进步

    分页是日常页面中见到过最多的功能,也是身为一个前端必备的技能,虽然现在已经有很多成熟的插件了,不过底层原理我们必须得掌握,不多说了,直接上代码

    • html
    
    
    <div class="pages">
       <a class="goFirstPage" onclick="goFirstPage()">首页</a>
       <a class="prev">&#60;</a>
       <div class="page_btns">
            <a data-pagenum="1" onclick="FN_pageBtns($(this))">1</a>
            <a data-pagenum="2" onclick="FN_pageBtns($(this))">2</a>
            <a data-pagenum="3" onclick="FN_pageBtns($(this))">3</a>
            <a data-pagenum="4" onclick="FN_pageBtns($(this))">4</a>
            <a data-pagenum="5" onclick="FN_pageBtns($(this))">5</a>
       </div>
       <a class="next">&#62;</a>
       <a class="goLastPage" onclick="goLastPage()">尾页</a>
       <span class="DOM_total_pages"></span>
    </div>
     
    • javascript
    // 声明我们所需要的变量

      var
      page_num = 1, //当前页数默认第一页
      totalPage, //总页数
      prevPage_btn = $('.pages .prev'), //上一页按钮
      nextPage_btn = $('.pages .next'), //下一页按钮
      pageBtn_Html, //用来放分页按钮的容器
      _showsArticle = $('#js-showplaylist'), //列表容器
      _showsArticleJsonLi //用于保存拼接的数据html
      ;

    function FN_shows_articleGetPageJson(page_num){
        $.ajax({
            url: 'http://ezfm.meldingcloud.com/schedule/getlist?programId=1&page='+page_num+'&type=history&sort=0&callback=1',
            type: 'get',
            dataType: 'json',
            success: function (data) {
                // 先删除掉原来的数据
                _showsArticle.children().remove();
                var _data = data.data;
                totalPage = data.totalPage;//总页数
                if(page_num <= totalPage){
                    $('#showpage-noDate').hide();
                    for(var i=0;i<_data.length;i++){
                        _showsArticleJsonLi = '<li><i class="item-playbtn" data-id="" data-type="'+_data[i].audioType+'" data-title="'+_data[i].title+'" data-date="'+_data[i].day+'" data-time="'+_data[i].time+'" data-img="'+_data[i].programUrl+'" data-announcer="Shane Bigham" data-url="'+_data[i].mediaUrl+'"></i><h4 class="item-title">'+_data[i].title+'</h4><span class="item-time">'+_data[i].day+'</span><span class="item-info"><a href="#" class="add" title="添加"></a><a href="#" class="share" title="分享"></a></span></li>';
                        _showsArticle.append(_showsArticleJsonLi);
                    }
                }else{  //没有数据
                    $('#showpage-noDate').show();
                }
                if(page_num == 1){   // 数据为第一页时隐藏上一页按钮显示下一页按钮
                    prevPage_btn.hide();
                    nextPage_btn.show();
                    $('.goFirstPage').hide();
                    $('.goLastPage').show();
                }else if(page_num > 1){
                    prevPage_btn.show();
                    nextPage_btn.show();
                    $('.goFirstPage').show();
                    $('.goLastPage').show();
                }
                if(page_num == totalPage){// 数据为最后一页时显示上一页按钮隐藏下一页按钮
                    nextPage_btn.hide();
                    prevPage_btn.show();
                    $('.goFirstPage').show();
                    $('.goLastPage').hide();
                }
    
                // 当前页数在 >=3 并且  <=总页数-2的范围内 根据当前页数判断分页按钮
                function FN_page_btnsNum(){
                    var page_num_1 = page_num-2 , page_num_2 = page_num-1 , page_num_4 = page_num+1 , page_num_5 = page_num+2;
                    $('.page_btns a').eq(0).text(''+page_num_1+'');
                    $('.page_btns a').eq(0).attr('data-pagenum',''+page_num_1+'');
                    $('.page_btns a').eq(1).text(''+page_num_2+'');
                    $('.page_btns a').eq(1).attr('data-pagenum',''+page_num_2+'');
                    $('.page_btns a').eq(2).text(''+page_num+'');
                    $('.page_btns a').eq(2).attr('data-pagenum',''+page_num+'');
                    $('.page_btns a').eq(3).text(''+page_num_4+'');
                    $('.page_btns a').eq(3).attr('data-pagenum',''+page_num_4+'');
                    $('.page_btns a').eq(4).text(''+page_num_5+'');
                    $('.page_btns a').eq(4).attr('data-pagenum',''+page_num_5+'');
                }
                // 当前页数大于总页数-2  根据总页数判断
                function FN_totalPage_btnsNum(){
                    var totalPage_num_1 = totalPage-4 , totalPage_num_2 = totalPage-3 , totalPage_num_3 = totalPage-2 , totalPage_num_4 = totalPage-1;
                    $('.page_btns a').eq(0).text(''+totalPage_num_1+'');
                    $('.page_btns a').eq(0).attr('data-pagenum',''+totalPage_num_1+'');
                    $('.page_btns a').eq(1).text(''+totalPage_num_2+'');
                    $('.page_btns a').eq(1).attr('data-pagenum',''+totalPage_num_2+'');
                    $('.page_btns a').eq(2).text(''+totalPage_num_3+'');
                    $('.page_btns a').eq(2).attr('data-pagenum',''+totalPage_num_3+'');
                    $('.page_btns a').eq(3).text(''+totalPage_num_4+'');
                    $('.page_btns a').eq(3).attr('data-pagenum',''+totalPage_num_4+'');
                    $('.page_btns a').eq(4).text(''+totalPage+'');
                    $('.page_btns a').eq(4).attr('data-pagenum',''+totalPage+'');
                }
                // 当前页数小于3页的  默认1,2,3,4,5页
                function FN_LessThanThree_btnsNum(){
                    $('.page_btns a').eq(0).text('1');
                    $('.page_btns a').eq(0).attr('data-pagenum','1');
                    $('.page_btns a').eq(1).text('2');
                    $('.page_btns a').eq(1).attr('data-pagenum','2');
                    $('.page_btns a').eq(2).text('3');
                    $('.page_btns a').eq(2).attr('data-pagenum','3');
                    $('.page_btns a').eq(3).text('4');
                    $('.page_btns a').eq(3).attr('data-pagenum','4');
                    $('.page_btns a').eq(4).text('5');
                    $('.page_btns a').eq(4).attr('data-pagenum','5');
                }
                if(page_num < 3){
                    FN_LessThanThree_btnsNum();
                }
                if(page_num >= 3 && page_num <= totalPage-2){
                    FN_page_btnsNum();
                }
                if(page_num > totalPage-2){
                    FN_totalPage_btnsNum();
                }
    
                // 根据当前页数定位到按钮并且给样式
                for(var l=0;l<$('.pages .page_btns a').length;l++){
                    if($('.pages .page_btns a').eq(l).attr('data-pagenum') == page_num){
                        $('.pages .page_btns a').eq(l).siblings().removeClass('current');
                        $('.pages .page_btns a').eq(l).addClass('current');
                    }
                }
                console.log(page_num);
                localStorage.page_num = page_num;
                // 保存总页数到本地
                localStorage.totalPage = totalPage;
    
            },
            error: function () {
                console.log('请求失败');
            }
        });
    }
    // 下一页
    nextPage_btn.on('click',function(){
        FN_shows_articleGetPageJson(++localStorage.page_num);
    })
    // 上一页
    prevPage_btn.on('click',function(){
        FN_shows_articleGetPageJson(--localStorage.page_num);
    })
    // 首页
    function goFirstPage(){
        FN_shows_articleGetPageJson(1);
    }
    // 尾页
    function goLastPage(){
        FN_shows_articleGetPageJson(parseInt(localStorage.totalPage));
    }
    
    // 点击按钮切换分页
    function FN_pageBtns(_Dompage_btns){
        FN_shows_articleGetPageJson(parseInt(_Dompage_btns.attr('data-pageNum')));
    }
    
    // show-article.html   点击播放
    $(document).on('click','#js-showplaylist li .item-playbtn',function(){
        var _this = $(this);
        audioPlay(_this,true);  //调用播放方法
    })
    
    FN_shows_articleGetPageJson(page_num);

    css大家根据自己的需求来定制吧,给各位看下我的最终效果图

    好了,分享到此结束,写的不好,如有错误请各位指出

  • 相关阅读:
    C#实现二维码生成与解码
    js中正则表达式使用
    Busybox镜像
    linux删除文件后,空间未释放的一种情况,使用lsof查看
    linux中.nfsxxxx引起的文件无法删除
    linux中的查找命令find,locate,which,whereis
    openj9
    Ali流量控制中间件Sentinel
    LDAP认证模式简介
    nginx支持ipv6
  • 原文地址:https://www.cnblogs.com/webXiaoAYang/p/10342332.html
Copyright © 2020-2023  润新知