zoukankan      html  css  js  c++  java
  • 选项卡---面向对象

    代码

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
    
            ul,
            ul li {
                list-style: none;
            }
    
            #box,
            #box1 {
                width: 300px;
                height: 200px;
                border: 2px solid #ccc;
                margin: 50px auto;
            }
    
            #list,
            #list1 {
                border-bottom: 2px solid #ccc;
                display: flex;
            }
    
            #list li,
            #list1 li {
                flex: 1;
                height: 30px;
                line-height: 30px;
                text-align: center;
                border-right: 2px solid #ccc;
                cursor: pointer;
            }
    
            #list li:last-child,
            #list1 li:last-child {
                border-right: none;
            }
    
            .box {
                height: 168px;
                display: none;
            }
    
            .active {
                background: pink;
                color: #fff;
            }
        </style>
    
    </head>
    
    <body>
        <div id="box">
            <ul id="list">
                <li class="active">第一项</li>
                <li>第五项</li>
                <li>第十项</li>
            </ul>
            <div class="box" style="display: block;">第一项盒子</div>
            <div class="box">第五项盒子</div>
            <div class="box">第十项盒子</div>
        </div>
    
        <div id="box1">
            <ul id="list1">
                <li class="active">第一项</li>
                <li>第五项</li>
                <li>第十项</li>
            </ul>
            <div class="box" style="display: block;">第一项盒子</div>
            <div class="box">第五项盒子</div>
            <div class="box">第十项盒子</div>
        </div>
        <script>
    
            // 面向过程
            // var lis = document.getElementsByTagName('li');
            // var boxes = document.getElementsByClassName('box');
            // for (var i = 0; i < lis.length; i++) {
            //     lis[i].index = i;
            //     lis[i].onclick = function () {
            //         for (var j = 0; j < lis.length; j++) {
            //             lis[j].className = '';
            //             boxes[j].style.display = 'none';
            //         }
            //         this.className = 'active';
            //         boxes[this.index].style.display = 'block';
            //     }
            // }
    
            // 面向对象  构造函数+原型创建
    
            // 构造函数中,this就指向该构造函数, 事件函数中,this指向该元素
            function Tab(ele) {
                // 获取元素 私有 留在构造函数中
                this.box = document.getElementById(ele);
                this.lis = this.box.getElementsByTagName('li');
                this.boxes = this.box.getElementsByClassName('box');
                var that = this;  // 将构造函数的this 存在变量that中
    
    
                for (var i = 0; i < this.lis.length; i++) {
                    this.lis[i].index = i;
                    this.lis[i].onclick = function () {  // 在点击事件中,this 谁用他 他指谁 li 
                       that.fn(this);  // 实参 - 谁用他 他指谁this
    
                    }
                }
            }
    
            // 公共 共享 切换tab页面功能部分 放在 prototype原型中
            Tab.prototype.fn = function (a) {  //形参 
                // this指向 构造函数tab 
                for (var j = 0; j < this.lis.length; j++) {
                    this.lis[j].className = '';
                    this.boxes[j].style.display = 'none';
                }
                a.className = 'active';  // this 谁用他 他指谁
                this.boxes[a.index].style.display = 'block';
            }
    
            new Tab('box');
            new Tab('box1');
    
    
        </script>
    </body>
    
    </html>

    效果

  • 相关阅读:
    mysql practice
    image update to ubuntu18.04
    C++11 new feature
    bazel remote executor--- buildfarm( in docker)
    python3学习笔记13(数据结构)
    python3学习笔记12(变量作用域)
    python3学习笔记11(函数)
    jmeter 01 之beanshell preprocessor
    python3学习笔记10(迭代器和生成器)
    python3学习笔记十(循环语句)
  • 原文地址:https://www.cnblogs.com/shihaiying/p/13276193.html
Copyright © 2011-2022 走看看