Tab选项卡(js)


实现效果与思路

今天来实现一个常用的功能tab选项卡。下图是基本的样式,当点击不同的选项卡标签时会展示不同的选项卡内容。

 

 

 

实现原理是首先给每个选项卡内容都隐藏,当点击选项卡时使其对应的内容显示就实现了tab选项切换的功能。

具体代码实现

1. 样式实现

<style>
        button{                //选项卡按钮
            appearance: none;
            outline: none;   //去除按钮外边框线
            float: left;     //本身display:inline-block 会使按钮之间有外边距
            border:none;
            width: 130px;
            height: 30px;
        }
        .clear{
            clear: both;
        }
        .content{
            width: 520px;
            height: 200px;
            background-color: blanchedalmond
        }
       
        .box{
            height: 200px;
            text-align: center;
            display: none;      //默认将所有的内容框隐藏
        }
         .active{
            display: block;    //将内容框显示
        }
        .active_btn{
            background-color: #403242;   //给点击的btn添加背景
            color: yellow;
        }
    </style>

方式一:  使用立即执行函数  

使用立即执行函数传参,保证点击事件函数中使用的i是当前点击的i, 为当前点击的按钮添加样式和内容的展示。否则在点击事件之前,上层for循环已经结束,i变为btns.length,所有按钮的事件函数所使用的i都会变成btns.length.

<script>
        //需求分析:当用户点击选项卡时 对应显示box 中内容
        //获取所有的元素
        var btns = document.getElementsByTagName('button');
        var boxs = document.getElementsByClassName('box');

//方式一 通过立即执行函数

        for (var i = 0; i < btns.length; i++) {
            (function (i) {  //使用立即执行函数传参,保证点击事件函数中使用的i是当前的i,否则在点击事件之前,上for循环已经结束,i变为btns.length,事件函数所使用的i也将为btns.length.
                var i = i;
                btns[i].onclick = function () {   //给每一个按钮添加点击事件
                    //每次点击之前 清空之前点击的所有的button按钮样式
                    for (var j = 0; j < btns.length; j++) {
                        btns[j].className = '  ';
                        boxs[j].className = 'box'
                    }
                    btns[i].className = 'active_btn';   //添加类名样式,给当前点击的按钮添加背景色
                    boxs[i].className = 'box active'  //让当前按钮对应的内容box显示
                }
            }
            )(i)
        } 


    </script>

方式二:使用let块级作用域,使每个事件函数中的i都是当前点击的 i 

<script>

        //需求分析:当用户点击选项卡时 对应显示box 中内容
        //获取所有的元素
        var btns = document.getElementsByTagName('button');
        var boxs = document.getElementsByClassName('box');


        for (let i = 0; i < btns.length; i++) {
                btns[i].onclick = function () {
                    //清空所有的button按钮样式
                    for (var j = 0; j < btns.length; j++) {
                        btns[j].className = '  ';
                        boxs[j].className = 'box'
                    }
                    btns[i].className = 'active_btn';
                    boxs[i].className = 'box active'
                }
        } 


    </script>

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个简单的实现示例: HTML代码: ```html <div class="tab"> <button class="tab-btn active" data-tab="tab1">选项卡1</button> <button class="tab-btn" data-tab="tab2">选项卡2</button> <button class="tab-btn" data-tab="tab3">选项卡3</button> </div> <div class="tab-content" id="tab1"> <p>这是选项卡1的内容</p> </div> <div class="tab-content" id="tab2"> <p>这是选项卡2的内容</p> </div> <div class="tab-content" id="tab3"> <p>这是选项卡3的内容</p> </div> ``` CSS代码: ```css .tab-btn { background-color: #ccc; border: none; color: #fff; padding: 10px; cursor: pointer; } .active { background-color: #f00; } .tab-content { display: none; } ``` JavaScript代码: ```js // 获取所有选项卡按钮 const tabBtns = document.querySelectorAll(".tab-btn"); // 获取所有选项卡内容 const tabContents = document.querySelectorAll(".tab-content"); // 循环遍历每个选项卡按钮 tabBtns.forEach((btn) => { // 添加点击事件监听器 btn.addEventListener("click", () => { // 移除所有选项卡按钮的 active 类 tabBtns.forEach((btn) => { btn.classList.remove("active"); }); // 给当前点击的选项卡按钮添加 active 类 btn.classList.add("active"); // 隐藏所有选项卡内容 tabContents.forEach((content) => { content.style.display = "none"; }); // 显示与点击按钮对应的选项卡内容 const tabId = btn.getAttribute("data-tab"); document.getElementById(tabId).style.display = "block"; }); }); ``` 解释一下,首先我们通过 `querySelectorAll` 方法获取到所有选项卡按钮和选项卡内容的元素,然后循环遍历每个选项卡按钮,给它们添加点击事件监听器。当点击某个选项卡按钮时,我们先移除所有选项卡按钮的 `active` 类,再给当前点击的选项卡按钮添加 `active` 类。接下来,我们隐藏所有选项卡内容,然后根据点击按钮的 `data-tab` 属性值,找到与之对应的选项卡内容,将它的 `display` 样式属性设为 `block`,以显示该选项卡内容。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值