资讯专栏INFORMATION COLUMN

选项卡(面向对象)

468122151 / 2575人阅读

摘要:普通写法转换过程先变型尽量不要出现函数嵌套函数可以有全局变量把中不是赋值的语句放到多带带函数中改成面向对象全局变量就是属性函数就是方法中创建对象改指向事件或定时器问题现要求再创建一个选项卡,自动轮播,只需新增修改和新增一个方法

html:

111
222
333

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 = "";
                This.aDiv[i].style.display = "none"
            }
            This.aInput[This.iNow].className = "active";
            This.aDiv[This.iNow].style.display = "block"
        }, 2000)
    }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94079.html

相关文章

  • 选项面向对象

    摘要:普通写法转换过程先变型尽量不要出现函数嵌套函数可以有全局变量把中不是赋值的语句放到单独函数中改成面向对象全局变量就是属性函数就是方法中创建对象改指向事件或定时器问题现要求再创建一个选项卡,自动轮播,只需新增修改和新增一个方法 html: 111 222 333 css: #div1 div{width: 200px; heig...

    ZweiZhao 评论0 收藏0
  • [js高手之路] es6系列教程 - 新的类语法实战选项

    摘要:其实的面向对象很多原理和机制还是的,只不过把语法改成类似和老牌后端语言中的面向对象语法一用封装一个基本的类是不是很向和中的类其实本质还是原型链,我们往下看就知道了首先说下语法规则中的就是类名,可以自定义就是构造函数,这个是关键字,当实例化对 其实es6的面向对象很多原理和机制还是ES5的,只不过把语法改成类似php和java老牌后端语言中的面向对象语法. 一、用es6封装一个基本的类 ...

    yintaolaowanzi 评论0 收藏0
  • JS面向对象1

    摘要:什么是面向对象编程用对象的思想去写代码,就是面向对象编程过程式写法面向对象写法我们一直都在使用对象数组时间面向对象编程的特点抽象抓住核心问题封装只能通过对象来访问方法继承从已有对象上继承出新的对象多态多对象的不同形态对象的组成方法行为操作对 什么是面向对象编程 用对象的思想去写代码,就是面向对象编程 过程式写法 面向对象写法 我们一直都在使用对象 数组Array 时间Dat...

    xumenger 评论0 收藏0
  • 谈谈javascript插件的写法

    插件顾名思义就是能在一个页面多处使用, 各自按自己的参数配置运行, 并且相互不会冲突.会写javascript插件是进阶js高级的必经之路, 也是自己所学知识的一个典型的综合运用. 如果你还没头绪, 无从下手的话, 不用着急, 今天我们就一起来探讨一下插件的一般写法.所需技能: 1.面向对象用法 2.闭包的理解 3.变量作用域的理解 以一个tab选项卡的为例: 第一步: 我们需要写html结...

    lakeside 评论0 收藏0

发表评论

0条评论

468122151

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<