菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
170
0

选项卡---面向对象

原创
05/13 14:22
阅读数 87314

代码

<!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>

 

效果

发表评论

0/200
170 点赞
0 评论
收藏
为你推荐 换一批