JavaScript系列---【选项卡案例】

html代码:

    <div id="warp">
        <ul id="left_list">
            <li class="active">a</li>
            <li>b</li>
            <li>c</li>
            <li>d</li>
        </ul>
        <div id="right">
            <div class="right_box test haha" style="display: block">
                <a href="#">a1</a>
                <ul>
                    <li class="active">a1</li>
                    <li>a2</li>
                    <li>a3</li>
                    <li>a4</li>
                </ul>
            </div>
            <div class="right_box">
                <a href="#">b1</a>
                <ul>
                    <li class="active">b1</li>
                    <li>b2</li>
                    <li>b3</li>
                    <li>b4</li>
                </ul>
            </div>
            <div class="right_box">
                <a href="#">c1</a>
                <ul>
                    <li class="active">c1</li>
                    <li>c2</li>
                    <li>c3</li>
                    <li>c4</li>
                </ul>
            </div>
            <div class="right_box">
                <a href="#">d1</a>
                <ul>
                    <li class="active">d1</li>
                    <li>d2</li>
                    <li>d3</li>
                    <li>d4</li>
                </ul>
            </div>
        </div>
    </div>

css代码:

<style>
        * {
            padding: 0;
            margin: 0;
            list-style: none;
        }

        #warp {
             800px;
            border: 1px solid #000000;
            margin: 20px auto;
            background: blue;
            height: 362px;
        }

        #left_list {
            float: left
        }

        #left_list li {
             200px;
            height: 89px;
            background: red;
            margin-bottom: 2px;
            color: #fff;
            font: 50px/89px "黑体";
            text-align: center;
        }

        #left_list .active {
            background: yellow;
            color: #000;
        }

        #right {
            float: left
        }

        #right a {
            display: block;
             600px;
            height: 322px;
            text-align: center;
            color: #000;
            font: 100px/322px "Microsoft YaHei";
            text-decoration: none;
            background: #0F0;
        }

        #right li {
            height: 40px;
            float: left;
             148px;
            background: #909;
            text-align: center;
            font: 20px/40px "Microsoft YaHei";
            margin-right: 2px;
            color: #fff;
        }

        #right .active {
            background: #fff;
            color: #000;
        }

        #right div {
            display: none;
        }
    </style>

js代码:

<script>
        // 获取元素
        var leftList = document.getElementById("left_list"),
            leftListOlis = leftList.getElementsByTagName("li");
        var right = document.getElementById("right"),
            rightBoxs = right.getElementsByClassName("right_box");

        console.log(leftListOlis, rightBoxs);
        // 循环绑定事件
        for (var i = 0; i < leftListOlis.length; i++) {
            // 自定义索引
            leftListOlis[i].index = i;
            // 给当前这个li绑定事件
            leftListOlis[i].onclick = function () {
                // 函数的调用  传递实参(当前这个li自定义索引的值)
                tabChage(this.index);
            }
        }



        // 大的选项卡切换
        function tabChage(index) {
            // 先清空所有的激活样式
            for (var i = 0; i < leftListOlis.length; i++) {
                leftListOlis[i].className = "";
                rightBoxs[i].style.display = "none";
            }

            // 再让当前这个li和对应的那个div有激活样式
            leftListOlis[index].className = "active";
            rightBoxs[index].style.display = "block";


            // 当前展示区域下 小的选项卡切换
            change(rightBoxs[index]);
        }


        // 默认展示是第一项 对应的是第一块区域 如果用户直接点击第一块区域对应的小的选项卡没办法切换  默认调永一次change方法
        change(rightBoxs[0]);

        // 小的选项卡切换
        //curRightBox 限定获取范围
        function change(curRightBox){
            // 获取元素
            var curOlis = curRightBox.getElementsByTagName("li"),
                curA = curRightBox.getElementsByTagName("a")[0];
                console.log(curOlis,curA);

            // 循环变量给当前这块区域下的每一个li绑定事件
            for(var i = 0;i<curOlis.length;i++){
                curOlis[i].onclick = function(){
                    // 先清空所有的激活样式
                    for(var j = 0;j<curOlis.length;j++){
                        curOlis[j].className = "";
                    }
                    // 让当前这个li有激活样式
                    this.className = "active";
                    // 将当前这个li的内容展示到a标签
                    curA.innerHTML = this.innerHTML;
                }
            }
        }
    </script>

展示效果图:

原文地址:https://www.cnblogs.com/chenhaiyun/p/14530771.html