zoukankan      html  css  js  c++  java
  • 分页制作

    很多时候,不能全部显示数据,只能通过分页来做。之前有个项目,它运用的 dicuz 框架有自带的分页功能,但是唯一不好的地方是用户体验不好,需要刷新网页,所以就自己尝试做了一个。

    效果如图:

    css 代码:

    #page {
        text-align: center;
    }
    .page {
        display: inline-block;
    }
    .page a {
        padding: 3px 8px;
        border: 1px solid #d2d2d2;
        text-decoration: none;
        margin: 0 2px;
        color: #444;
    }
    .page a.invisible {
        visibility: hidden;
    }
    .page a.on {
        color: #fff;
        border-color: #d36969;
        background: #d36969;
    }

    #page 和 .page 的样式设置是为了让分页居中。

    js 代码:

    var page_num   = 5;
    var page_index = 1;
    setPages(page_num)
    function setPages(num) {
       $('#page').remove();
    if (num > 1) { $('body').append('<div id="page"><div class="page"></div></div>'); var page_text = '<a class="prev btn" href="javascript:void(0)">上一页</a>' +
                  '<a class="on" href="javascript:void(0)">1</a>'; for (var i = 2; i <= num; i ++) { page_text += '<a href="javascript:void(0)">'+i+'</a>'; } page_text += '<a class="next btn" href="javascript:void(0)">下一页</a>'; $('#page .page').html(page_text); canShow(); } }

    page_num 表示页数,这个页数应该是在加载页面的时候从后台获取,只有当页数有两页或者两页以上,才会有分页;

    page_index 表示当前页(这个值会在用 ajax 与后台交互时,将它放入 data 里来传给后台);

    $('#page').remove() 这个在后面会解释,创建了 '上一页'、'下一页'和 5 个页码,并插入到 body,这里有一个 canShow 函数。

    function canShow() {
        for (var i = 1; i < $('#page .page a').length - 1; i ++) {
            if ($('#page .page a').eq(i).hasClass('on')) {
                $('#page .page a').removeClass('invisible');
                if (i == 1) {
                    $('#page .page .prev').addClass('invisible');
                } else if (i == page_num) {
                    $('#page .page .next').addClass('invisible');
                } 
            }
        }
    }

    这个函数是用来判断 '上一页' 和 '下一页' 能不能显示。然后就是点击页码或者上下页:

    $('#page .page a').on('click', function() {
        if ($(this).hasClass('on')) return;
        $('#page .page a').removeClass('on')
        if ($(this).hasClass('prev')) {
            page_index --;
            $('#page .page a').eq(page_index).addClass('on');
        }else if ($(this).hasClass('next')) {
            page_index ++;
            $('#page .page a').eq(page_index).addClass('on');
        }else {
            page_index = $(this).index();
            $(this).addClass('on');
        }
        getData();
        canShow();
    });

    这一段纯属一个逻辑判断,就不在介绍了,这里也出现一个新函数 getData,就是用来和后台交互的。

    var url  = '...';
    var data = { page_index: page_index, ...};
    function getData(){
        $.ajax({
            url: url,
            type: 'post',
            data: data,
            success: function(msg){
                msg = JSON.parse(msg);
                showText(msg);
            }
        })
    }

    把当前页码 page_index 和一些需要的信息放入data 里传给后台,然后获取的数据基本是一个 JSON 数据,要先 parse 一下,这里有一个 showText 函数,就是用来填写内容的。

    function showText(data){
        var content = '';
        for (obj in data) {
            content += <!-- 布局 -->
        }
        $('#test').empty().html(content);
    }

    从后台获取的数据通过传参的方式传到这个函数,通过循环把数据取出来,先把需要显示这页内容的 test 里面上个页面的内容清空,再一一对应到布局里。

    PS:项目中另一个需求——筛选功能

    其实一开始就考虑到这个,所以才把创建分页,用一个函数 setPages 来封装,并在里面写了 $('#page').remove(),然后筛选时,在那个和后台交互的 getData 函数中,后台会多传一个数据表示筛选结果总共有几页,就只要再调用 setPages 这个函数,并把页数传进去就解决了。

  • 相关阅读:
    Balanced Binary Tree
    Swap Nodes in Pairs
    Reverse Nodes in k-Group
    Reverse Linked List II
    Remove Nth Node From End of List
    Remove Duplicates from Sorted List II
    Remove Duplicates from Sorted List
    Partition List
    Merge Two Sorted Lists
    【Yii2.0】1.2 Apache检查配置文件语法
  • 原文地址:https://www.cnblogs.com/LY-leo/p/5808196.html
Copyright © 2011-2022 走看看