• javascript实例学习之四——javascript分页


    话不多少,直接上代码

    html代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>javascript分页效果</title>
        <style>
            a{margin-right:5px;}
        </style>
    </head>
    <body>
        <div id="div1">         
        </div>
        <script src="js/myPage.js"></script>
    </body>
    </html>

    javascript代码:

    window.onload = function() {
        var page = new Page({
            'id': 'div1',
            'allNum': 10,
            'showNum': 5,
            'nowNum': 10,
            'callback':function(nowIndex,allIndex){
                alert('当前页'+nowIndex+',总页数'+allIndex);
            }
        });
        page.init();
    
    }
    
    //采用面向对象的方法进行封装
    function Page(opt) {
        if (!opt) {
            return;
        }
    
        this.id = opt.id;
        this.oParent = document.getElementById(this.id);
        //一共有多少页
        this.allNum = opt.allNum || 5;
        //显示多少个分页
        this.showNum = opt.showNum || 5;
        //当前选择的页面
        this.nowNum = opt.nowNum || 1;
        this.callback=opt.callback||function(){};
    }
    Page.prototype = {
        constructor: Page,
        init: function() {
            var that = this;
            this.change(1);
        },
        change: function(curNum) {
            this.nowNum = curNum;
            //为了提高性能,可以移除原来所有链接的事件处理程序
            var aAs = this.oParent.getElementsByTagName('a');
            for (var i = 0; i < aAs.length; i++) {
                aAs[i].onclick = null;
            }
            this.oParent.innerHTML = '';
    
            var tmp = Math.floor(this.showNum / 2);
            //处理首页,当nowNum>tmp+1,并且allNum>showNum时显示
            if (this.nowNum > tmp + 1 && this.allNum > this.showNum) {
                this.appendLink('#1', '首页');
            }
            //处理上一页,只要当前选择页不是首页,就呈现
            if (this.nowNum > 1) {
                this.appendLink('#' + (this.nowNum - 1), '上一页');
            }
            //处理中间页码
            //如果总页码小于显示页码数,从1开始以此显示
            if (this.allNum <= this.showNum) {
                this.appendPageLinks(1, this.allNum);
            } else {
                //如果选择的是第1页到第tmp页,显示前面showNumge
                if (this.nowNum <= tmp) {
                    this.appendPageLinks(1, this.showNum);
                }
                //如果选择是第this.allNum-tmp,显示最后showNum个
                else if (this.nowNum >= this.allNum - tmp) {
                    this.appendPageLinks(this.allNum - this.showNum + 1, this.allNum);
                }
                //其他情况,则以this.nowNum为中心,显示this.showNum个
                else {
                    this.appendPageLinks(this.nowNum - tmp, this.nowNum + tmp);
                }
            }
            //处理下一页,只要当前选择的不是最后一页,就显示下一页
            if (this.nowNum < this.allNum) {
                this.appendLink('#' + (this.nowNum + 1), '下一页');
            }
            //处理最后一页,当nowNum<this.allNum-tmp,并且allNum>showNum时候显示
            if (this.nowNum < this.allNum - tmp & this.allNum > this.showNum) {
                this.appendLink('#' + this.allNum, '尾页');
            }
            //添加事件处理程序
            var that = this;
            var aAs = this.oParent.getElementsByTagName('a');
            for (var i = 0; i < aAs.length; i++) {
                aAs[i].onclick = function() {
                    var index = parseInt(this.getAttribute('href').substring(1));
                    that.change(index);
                    that.callback(that.nowNum,that.allNum);
                    return false;
                }
            }
        },
        appendLink: function(href, innerHtml) {
            var oA = document.createElement('a');
            oA.href = href;
            oA.innerHTML = innerHtml;
            this.oParent.appendChild(oA);
        },
        appendPageLink: function(pageNum) {
            if (pageNum === this.nowNum) {
                this.appendLink('#' + pageNum, pageNum);
            } else {
                this.appendLink('#' + pageNum, '[' + pageNum + ']');
            }
    
        },
        appendPageLinks: function(startPageNum, endPageNum) {
            for (var i = startPageNum; i <= endPageNum; i++) {
                this.appendPageLink(i);
            }
        }
    
    }
  • 相关阅读:
    软件测试从业者,试用期生存指南(完整版)
    学测试,看视频?NONONO,除非这种情况
    vi / vim 字符替换详解
    Centos 下 mysql 安装过程
    Web测试到底是在测什么(资料合集)
    我花了两个小时,写了这份年终总结 。
    拒绝无效加班 !
    你离月薪30K还差哪些?
    从业十年分享:你应该知道的一些测试职业事实!
    别再TM跟我说找不到满意的工作!
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/5246644.html
Copyright © 2020-2023  润新知