Bootstrap垂直Tab的简单实现

Bootstrap垂直Tab的简单实现

背景

本人是后端(水平不怎么样), 由于项目需要开始着手写一点点前端, 因为需要一个Bootstrap的垂直tab页, 但是找来找去发现Bootstrap的组件只有水平的tab页, 因此只能自己动手实现一个简单的垂直tab页

需求

  1. 垂直显示
  2. 动态的进行tab切换, 无需进行路由跳转
  3. 利用Bootstrap的组件, 风格统一

看了一眼官网的组件列表, 发现列表组比较满足需求, 因此使用列表组来实现, 就是下面这个
在这里插入图片描述

效果

先看最终实现效果
在这里插入图片描述

思路

首先要做切换的效果我想到的是通过jQuery控制元素的隐藏和显示来实现, 在选中一个tab标签的时候, 将这个标签高亮并且显示出它所对应的tab页, 然后我就给每一个标签都手动绑定了一个点击事件, 没错手动绑定, 好在我的tab不算是很多, 即使是这样我也写了六个点击事件, 好在是实现了, 下面上代码

  • 第一版

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
        <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
        <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
        <script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
        <title>Document</title>
    </head>
    
    <body>
        <div class="row">
            <div class="list-group col-md-4 col-xs-4">
                <a id="tab1" href="#" class="tab list-group-item active">tab1</a>
                <a id="tab2" href="#" class="tab list-group-item">tab2</a>
                <a id="tab3" href="#" class="tab list-group-item">tab3</a>
                <a id="tab4" href="#" class="tab list-group-item">tab4</a>
                <a id="tab5" href="#" class="tab list-group-item">tab5</a>
                <a id="tab6" href="#" class="tab list-group-item">tab6</a>
            </div>
            <div class="col-md-8 col-xs-4">
                <div id="tab-item1" class="tab-item">
                    tab1
                </div>
                <div id="tab-item2" class="tab-item">
                    tab2
                </div>
                <div id="tab-item3" class="tab-item">
                    tab3
                </div>
                <div id="tab-item4" class="tab-item">
                    tab4
                </div>
                <div id="tab-item5" class="tab-item">
                    tab5
                </div>
                <div id="tab-item6" class="tab-item">
                    tab6
                </div>
            </div>
        </div>
    
        <script>
            $(document).ready(function () {
                $(".tab-item").hide();
                $("#tab-item1").show();
                $("#tab1").click(function () {
                    $(".tab-item").hide();
                    $(".tab").removeClass("active");
                    $("#tab1").addClass("active");
                    $("#tab-item1").show();
                });
                $("#tab2").click(function () {
                    $(".tab-item").hide();
                    $(".tab").removeClass("active");
                    $("#tab2").addClass("active");
                    $("#tab-item2").show();
                });
                $("#tab3").click(function () {
                    $(".tab-item").hide();
                    $(".tab").removeClass("active");
                    $("#tab3").addClass("active");
                    $("#tab-item3").show();
                });
                $("#tab4").click(function () {
                    $(".tab-item").hide();
                    $(".tab").removeClass("active");
                    $("#tab4").addClass("active");
                    $("#tab-item4").show();
                });
                $("#tab5").click(function () {
                    $(".tab-item").hide();
                    $(".tab").removeClass("active");
                    $("#tab5").addClass("active");
                    $("#tab-item5").show();
                })
                $("#tab6").click(function () {
                    $(".tab-item").hide();
                    $(".tab").removeClass("active");
                    $("#tab6").addClass("active");
                    $("#tab-item6").show();
                });
            });
        </script>
    </body>
    
    </html>
    

    到此位置效果是出来了…但是产品告诉我, 此时他要再加几个tab页!!! 这时候这种写法就让我的工作量变得很大了, 按照思路想下去我想到了循环遍历页面元素然后绑定事件的写法, 没错就是用forEach, 但是问题来了, 我的标签是a, 这个a标签啊, 实在是哪里都有, 这样遍历完了之后可能会把不该绑的地方也绑上点击事件, 这时候我咨询了前端小伙伴, 从而得知一个叫做事件委托的东西

    事件委托

    所谓委托, 顾名思义介绍把自己的事情交给别人去办嘛, 我们看一下现代汉语词典里面的定义哈
    在这里插入图片描述
    事件委托也就是说把自己(本元素)的事件交给别人(父级)去做

    好了, 对于这个需求了解这么多已经足够实现了(多了我也不会), 如需详细了解请诸君进行百度

    下面贴一个

    某大佬写的文章

    然后就产生了第二版

  • 第二版

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
        <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
        <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
        <script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
        <title>Document</title>
    </head>
    
    <body>
        <div class="row">
            <div id="tabs" class="list-group col-md-4 col-xs-4">
                <!--tab里面的值应与下面标签页的id一致-->
                <a tab="tab-item1" href="#" class="tab list-group-item active">tab1</a>
                <a tab="tab-item2" href="#" class="tab list-group-item">tab2</a>
                <a tab="tab-item3" href="#" class="tab list-group-item">tab3</a>
                <a tab="tab-item4" href="#" class="tab list-group-item">tab4</a>
                <a tab="tab-item5" href="#" class="tab list-group-item">tab5</a>
                <a tab="tab-item6" href="#" class="tab list-group-item">tab6</a>
            </div>
            <div class="col-md-8 col-xs-4">
                <!--id与上面标签里面的tab一致-->
                <div id="tab-item1" class="tab-item">
                    tab1
                </div>
                <div id="tab-item2" class="tab-item">
                    tab2
                </div>
                <div id="tab-item3" class="tab-item">
                    tab3
                </div>
                <div id="tab-item4" class="tab-item">
                    tab4
                </div>
                <div id="tab-item5" class="tab-item">
                    tab5
                </div>
                <div id="tab-item6" class="tab-item">
                    tab6
                </div>
            </div>
        </div>
    
        <script>
            //事件委托给父级div来处理
            $(document).ready(function () {
                $(".tab-item").hide();
                $("#tab-item1").show();
            });
            $(document).ready(function () {
                $("#tabs").on("click", "a", function (event) {
                    let target = $(event.target);
                    $(".tab-item").hide();
                    $(".tab").removeClass("active");
                    //添加css样式
                    target.addClass("active");
                    //取自定义字段里面的值(即a标签里面的tab字段)
                    //tab字段里面存的是各个标签页的id, 以此来控制显示和隐藏
                    $("#" + target.attr("tab")).show();
                });
            });
        </script>
    </body>
    
    </html>
    

最后

本人技术水平有限, 欢迎大家指出我的错误与不足# Bootstrap垂直Tab的简单实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值