zoukankan      html  css  js  c++  java
  • jQuery插件实例六:jQuery 前端分页

    先来看看效果:

    对于前端分页,关键是思路,和分页算法。本想多说两句,可又觉得没什么可说的,看代码吧:

    如何使用?                                                                                                                                                                                                           

                $("#pging").zPagination({
                    'navEvent':function(){
                        console.log('取数据Ajax');
                    }
                });

    JS代码

    //分页Pagination
    ; (function ($, window) {
        var defaults = {
            rowCount: 400, //总数据行数
            navPage: 10, //每次显示多少页导航
            pageSize: 10, //每页多少条数据
            currentPage: 20, //当前是第几页
            showRowsCount: true, //是否显示总数据数
            showGoto: false, //是否有跳转功能
            navUrl: '', //点击页后所跳转到的URL,用于非Ajax()方式:/Home/Index.aspx?pageIndex=
            ajaxUrl: '', //点击页后从哪个URL取数据,用于Ajax()方式:/Home/Index
            isAjaxData: true, //是从Ajax取数据还是非Ajax取数据
            divClass: 'z_paging', //外围DIV的Class,其下有.z_paging a , .z_paging a:hover , .z_paging>.z_paging_current
            navEvent: ''//点击导航页后所要执行的事件function(){...},通常和isAjaxData==true联用。
        };
        $.fn.zPagination = function (options) {
            $this = $(this);
            var ops = $.extend({}, defaults, options);
            var _pageCount = 0;
            var _startNav = 0;
            var _endNav = 0;
    
            //初始化参数
            function initParameter() {
                _pageCount = (ops.rowCount % ops.pageSize == 0) ? ops.rowCount / ops.pageSize : parseInt(ops.rowCount / ops.pageSize) + 1;
                if (ops.currentPage <= parseInt(ops.navPage / 2)) {
                    _startNav = 1;
                } else {
                    _startNav = ops.currentPage - parseInt(ops.navPage / 2); //(30-(10/2)==25)
                }
    
                _endNav = _startNav + ops.navPage;
                if (_endNav > _pageCount) {
                    _endNav = _pageCount;
                    _startNav = _endNav - ops.navPage;
                }
                if (_startNav < 1) {
                    _startNav = 1;
                }
    
                //生成DOM元素
                if (ops.isAjaxData == true) {
                    generateAjaxDom();
                } else {
                    generateDom();
                }
            };
    
            //网址方式加载数据 isAjaxData==false 时执行
            function generateDom() {
                $this.html('').addClass(ops.divClass);
                $('<a href=' + ops.navUrl + '1></a>').html(1).appendTo($this);
                _startNav++;
                if (_startNav != 2) {
                    $('<span></span>').html('...').appendTo($this);
                }
                while (_startNav < _endNav) {
                    $('<a href=' + ops.navUrl + _startNav + '></a>').html(_startNav).appendTo($this);
                    _startNav++;
                }
                _startNav--;
    
                if (_endNav < _pageCount) {
                    $('<span></span>').html('...').appendTo($this);
                }
                if (_startNav < _endNav && _endNav <= _pageCount) {
                    $('<a href=' + ops.navUrl + _endNav + '></a>').html(_pageCount).appendTo($this);
                }
                findCurrentNum();
            }
    
            //通过Ajax方式加载数据 isAjaxData==true 时执行
            function generateAjaxDom() {
                $this.html('').addClass(ops.divClass);
                $('<a href="javascript:void(0);"></a>').html(1).appendTo($this);
                _startNav++;
                if (_startNav != 2) {
                    $('<span></span>').html('...').appendTo($this);
                }
                while (_startNav < _endNav) {
                    $('<a href="javascript:void(0);"></a>').html(_startNav).appendTo($this);
                    _startNav++;
                }
                _startNav--;
    
                if (_endNav < _pageCount) {
                    $('<span></span>').html('...').appendTo($this);
                }
                if (_startNav < _endNav && _endNav <= _pageCount) {
                    $('<a href="javascript:void(0);"></a>').html(_pageCount).appendTo($this);
                }
    
                //给每个<a />添加事件
                function initAjaxData() {
                    $this.find('a').bind('click', function () {
                        try {
                            ops.currentPage = parseInt($(this).html());
                            if (typeof (ops.navEvent) == 'function') {
                                ops.navEvent();
                                initParameter(); //重新生成页数导航条,放在这里,放在这里,是为了避免因参数没传对,而出现看见导航页变了,而数据没变的情况
                            }
                        } catch (e) {
    
                        }
                    });
                }
                initAjaxData();
                findCurrentNum();
            }
    
            //找出当前页
            function findCurrentNum() {
                $this.find('a').each(function () {
                    if (parseInt($(this).html()) == ops.currentPage) {
                        $(this).addClass('z_paging_current');
                    }
                });
                appendEle();
            }
    
            //附加元素 是否显示总数据数
            function appendEle() {
                if (typeof (ops.showRowsCount) == 'boolean') {
                    $('<span class="z_rows_count"></span>').html('总数:' + ops.rowCount).appendTo($this);
                }
            }
    
            initParameter();
    
            //获取当前是第几页 调用方式:this.currentPage
            this.currentPage = function () {
                return ops.currentPage();
            };
    
            return this;
        };
    })(jQuery, window);

    CSS

    /*zPagination Begin*/
    .z_paging
    {
    }
    .z_paging a, .z_paging span
    {
        float: left;
        display: inline-block;
        vertical-align: text-bottom;
        text-align: center;
        line-height: 34px;
        background-color: #fff;
    }
    .z_paging a
    {
        cursor: pointer;
        border-radius: 3px;
        border: 1px solid #e5e5e5;
        padding: 0 12px;
        margin: 0 2px;
        text-decoration: none;
        color: #734ba9;
    }
    .z_paging a:hover
    {
        background-color: #6699ff;
        color: #fff;
    }
    .z_paging > .z_paging_current
    {
        background-color: #e5e5e5;
    }
    .z_paging > .z_rows_count
    {
        border-radius: 3px;
        border: 1px solid #e5e5e5;
        padding: 0 12px;
        margin: 0 2px;
        text-decoration: none;
        color: #734ba9;
    }
    /*zPagination End*/
  • 相关阅读:
    Mbs Framework 简介
    回应老赵: 适合C# Actor的消息执行方式 中看也中用的解决方案
    Mini 容器学习笔记5—— 组件的获取
    JS控制文本框只能输入N个字符.
    【转】外挂编写原理
    【转】集合小节
    CSS样式的filter(滤镜效果)
    系统变量(%SystemRoot% ,%windir% ,%temp%,%system%)的表示方法
    客户端调用服务器控件
    Flash MX 认证考试(样题)
  • 原文地址:https://www.cnblogs.com/nhsd/p/4023126.html
Copyright © 2011-2022 走看看