面向对象的选项卡案例

2021-12-22  本文已影响0人  圆滚滚大煤球
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .box {
            width: 600px;
            height: 300px;
            border: 5px #000 solid;
            margin: 50px auto;
        }
        ul , ol , li {
            list-style: none;
        }
        .box > ul {
            width: 100%;
            height: 40px;
            overflow: hidden;
        }
        .box > ul > li {
            width: 200px;
            float: left;
            height: 100%;
            line-height: 40px;
            font-size: 30px;
            text-align: center;
            background: orange;
            cursor: pointer;
        }
        .box > ul > li.active {
            background-color: purple;
        }
        .box > ol {
            position: relative;
            width: 100%;
            height: 260px;
        }
        .box > ol > li {
            width: 100%;
            height: 100%;
            position: absolute;
            left: 0;
            top: 0;
            line-height: 260px;
            text-align: center;
            font-size: 100px;
            background-color: skyblue;
            display: none;
        }
        .box > ol > li.active {
            display: block;
        }
    </style>
</head>
<body>
    <div class="box">
        <ul>
            <li class="active">1</li>
            <li>2</li>
            <li>3</li>
        </ul>
    <ol>
        <li class="active">1</li>
        <li>2</li>
        <li>3</li>
    </ol>
    </div>

    <script>
        // 面向对象的选项卡

        // 1、抽象内容
        // + 属性 btns
        // + 属性 tabs
        // + 方法 能实现点击事件切换的方法

        // 2、书写构造函数
        // + 接受一个参数:范围元素

        // 3、方法里面实现选项卡
        // + 
        function Tabs(ele) {
            // 拿到出现选项卡的范围
            this.ele = document.querySelector(ele)
            // 找到btns
            this.btns = this.ele.querySelectorAll('ul>li')
            // 找到tabs
            this.tabs = this.ele.querySelectorAll('ol>li')
            console.log(this.tabs);

            Tabs.prototype.change = function() {
                // 这个位置的this是当前实例
                var that = this;

                // 操作的是当前实例的btns tabs
                // this 就是当前实例,我们就要给this.btns的每一个添加点击事件
                this.btns.forEach(function (item,index) {
                    item.addEventListener('click',function(){
                        // this:你所点击的这个li
                        // that:实例对象
                        // console.log(that);
                        that.btns.forEach(function(t, i){
                            that.btns[i].className = '';
                            that.tabs[i].className = '';
                        })
                        // 给对应的添加类名
                        item.className = 'active';
                        that.tabs[index].className = 'active';
                    })
                });
            }
        }

        let t1 = new Tabs('.box');
        t1.change()
    </script>
</body>
</html>
上一篇下一篇

猜你喜欢

热点阅读