使用JS实现一个简单的选项卡效果

实现以下效果

使用到的知识点

HTML — 结构

  • 需要实现一个选项卡,里面有很多模块,因此首先需要一个div标签去包裹
  • 选项卡的选项部分使用列表去实现 ul-li
  • 选项卡的内容可以使用div来实现,每一个内容使用一个div
<!--快速生成以下代码的快捷键 div.main>(ul>li*3{选项$})+div*3{内容$} -->
    <div class="main" id="main">
        <ul>
            <li>选项1</li>
            <li>选项2</li>
            <li>选项3</li>
        </ul>
        <div>内容1</div>
        <div>内容2</div>
        <div>内容3</div>
    </div>

css —样式

  • 样式中第一步就是清空默认样式,一般是导入清空样式表,如果没有这个样式表,就把这个demo中用到的标签的默认清空。
  • 外面的大盒子需要居中–因为它是块级元素,因此,块级元素居中使用到的是margin这个属性,前提是给他一个宽度。
  • 选项卡部分需要的样式
    • 首先列表属于块元素,它是独占一行的,但是我们实现的效果是在同一行,因此需要转化(也可以使用浮动);
    • 需要给每一个选项卡一个固定的高度和宽度,让行高等于高度可以实现文本垂直居中。并且实现里面的内容水平居中,文本的居中方式是text-align属性;
    • 每一个选项卡需要一个边框;
    • 当把下面的内容添加边框以后,选项卡的边框和内容的边框都会有,因此这里可以使用一个相对定位,让选项卡向下方移动1像素,top为正值就是向下;
  • 内容部分:和选项卡类似,但是不需要加宽度,可以让他去继承父元素的宽度。当选项卡没选中时,内容部分是隐藏的,这里使用display:none这种方法,因为这个隐藏是不占位的。
  • 点击时:选项卡变色,内容也变色并且显示
       * {
            margin: 0;
            padding: 0;
        }

        ul {
            list-style: none;
        }

        .main {
            width: 500px;
            margin: 20px auto;
        }

        .main li {
            display: inline-block;
            width: 100px;
            height: 30px;
            line-height: 30px;
            text-align: center;
            border: 1px solid #333;
            margin-right: 10px;
            position: relative;
            top: 1px;
            cursor: pointer;
        }

        .main div {
            height: 300px;
            line-height: 300px;
            text-align: center;
            border: 1px solid #333;
            display: none;
        }

        .main li.choose {
            background-color: steelblue;
            border-bottom-color: steelblue;
        }

        .main div.choose {
            background-color: steelblue;
            display: block;
        }

js部分 —行为

  • 第一步获取想要操作的元素
  • 操作 :在css部分通过添加class名实现点击,因此当点击那个选项卡使就给这个选项卡加那个class名
    • 循环遍历每一个选项卡为它添加点击事件
    • 当点击时,首先需要清空所有的class名,然后给被点击的选项卡和相应的内容添加class这个类
<script>
        var main = document.getElementById("main");
        var list = main.getElementsByTagName("li");
        var con = main.getElementsByTagName("div");

        for(var i = 0;i<list.length;i++){
            // 文档在执行的时候,从上向下执行,并且把页面中的所有代码包括js加载完成以后用户才可以去实现点击,因此当用户在点击的时候,i已经是3,因此在这里我把每次循环的i值记录一下;
            list[i].index = i;
            list[i].onclick = function(){
                for(var i = 0;i<list.length;i++){
                    list[i].className = "";
                    con[i].className = "";
                }
                var index = this.index;
                list[index].className = "choose";
                con[index].className = "choose";
            }
        }
    </script>

选项卡的实现,难点在于鼠标点击的时候i的值已经是最大值,所以需要使用一个值去记录。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用jQuery实现选项卡淡入效果,具体代码如下: HTML部分: ```html <div class="tabs"> <ul class="tab-nav"> <li><a href="#tab1">选项卡1</a></li> <li><a href="#tab2">选项卡2</a></li> <li><a href="#tab3">选项卡3</a></li> </ul> <div class="tab-content"> <div id="tab1" class="tab-panel">这是选项卡1的内容</div> <div id="tab2" class="tab-panel">这是选项卡2的内容</div> <div id="tab3" class="tab-panel">这是选项卡3的内容</div> </div> </div> ``` CSS部分: ```css .tabs .tab-nav { list-style: none; margin: 0; padding: 0; } .tabs .tab-nav li { display: inline-block; margin-right: 10px; } .tabs .tab-nav li a { display: block; padding: 5px 10px; background-color: #ccc; color: #fff; text-decoration: none; } .tabs .tab-nav li.active a { background-color: #333; } .tabs .tab-content .tab-panel { display: none; } .tabs .tab-content .tab-panel.active { display: block; } ``` JS部分: ```javascript $(function() { $('.tab-nav li').click(function() { var tab_id = $(this).find('a').attr('href'); $('.tab-nav li').removeClass('active'); $(this).addClass('active'); $('.tab-panel').fadeOut(200, function() { $(tab_id).fadeIn(200); }); return false; }); }); ``` 代码解析: 1. 当用户点击选项卡时,使用jQuery的点击事件绑定函数`click()`来处理; 2. 获取选项卡对应的内容的`id`,并将所有选项卡的类名`active`移除; 3. 为当前选项卡添加类名`active`,并使用`fadeOut()`函数来实现当前选项卡对应的内容淡出的效果; 4. 在淡出效果结束后,使用`fadeIn()`函数来实现当前选项卡对应的内容淡入的效果。 这样就可以实现选项卡的淡入效果了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值