选项卡(面向对象)

html:

<div id="div1">
    <input type="button" value="1" class="active">
    <input type="button" value="2">
    <input type="button" value="3">
    <div style="display:block">111</div>
    <div>222</div>
    <div>333</div>
 </div>

css:

#div1 div{width: 200px; height: 200px;border:1px #000 solid; display: none;}
.active{background:#f00;}

js:

// 普通写法

    window.onload = function () {
        var oParent = document.getElementById('div1');
        var aInput = oParent.getElementsByTagName('input');
        var aDiv = oParent.getElementsByTagName('div');
        for (var i = 0; i < aInput.length; i++) {
            aInput[i].index = i;
            aInput[i].onclick = function () {
                for (var i = 0; i < aInput.length; i++) {
                    aInput[i].className = '';
                    aDiv[i].style.display = 'none'
                }
                this.className = 'active';
                aDiv[this.index].style.display = 'block'
            }
        }
    }
    

转换过程
-先变型 尽量不要出现函数嵌套函数,可以有全局变量,把onload中不是赋值的语句放到单独函数中

    var oParent = null;
    var aInput = null;
    var aDiv = null;
    window.onload = function () {
        oParent = document.getElementById('div1');
        aInput = oParent.getElementsByTagName('input');
        aDiv = oParent.getElementsByTagName('div');
        init();
    }

    function init() {
        for (var i = 0; i < aInput.length; i++) {
            aInput[i].index = i;
            aInput[i].onclick = change;
        } 
    }

    function change() {
        for (var i = 0; i < aInput.length; i++) {
            aInput[i].className = '';
            aDiv[i].style.display = 'none'
        }
        this.className = 'active';
        aDiv[this.index].style.display = 'block'
    }
    

//改成面向对象 
全局变量就是属性 函数就是方法 onload中创建对象 改this指向(事件或定时器问题)

    window.onload = function () {
       var t1 = new Tab()
       t1.init();
    }
    function Tab() {
        this.oParent = document.getElementById('div1');
        this.aInput = this.oParent.getElementsByTagName('input');
        this.aDiv = this.oParent.getElementsByTagName('div');
    }
    Tab.prototype.init = function () {
        var This = this;
        for (var i = 0; i < this.aInput.length; i++) {
            this.aInput[i].index = i;
            this.aInput[i].onclick = function (){
                This.change(this);
            }
        } 
    }
    Tab.prototype.change = function (obj) {
        for (var i = 0; i < this.aInput.length; i++) {
            this.aInput[i].className = '';
            this.aDiv[i].style.display = 'none'
        }
        obj.className = 'active';
        this.aDiv[obj.index].style.display = 'block'
    }
    

现要求再创建一个选项卡,自动轮播,只需新增div2 修改init和新增一个autoPlay方法

    window.onload = function () {
       var t1 = new Tab('div1')
       t1.init();
       var t2 = new Tab('div2')
       t2.init();
       t2.autoPlay();
    }
    function Tab(id) {
        this.oParent = document.getElementById(id);
        this.aInput = this.oParent.getElementsByTagName('input');
        this.aDiv = this.oParent.getElementsByTagName('div');
        this.iNow = 0;
    }

    Tab.prototype.autoPlay = function () {
        var This = this;
        setInterval(function () {
            if(This.iNow == This.aInput.length-1) {
                This.iNow = 0;
            }else {
                This.iNow++;
            }
            for (var i = 0; i < This.aInput.length; i++) {
                This.aInput[i].className = '';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值