当前位置: 首页 > article >正文

前端-js例子:tab切换

实现效果:


实现步骤:

1. body内容元素

 <div class="container">
        <ul class="top_title">
            <li class="first" index="1">title1</li>
            <li index="2">title2</li>
            <li index="3">title3</li>
            <li index="4">title4</li>
        </ul>
        <div class="tab_content">
            <div>content1</div>
            <div>content2</div>
            <div>content3</div>
            <div>content4</div>
        </div>
    </div>

2.定义css,修改样式

1>外边框

*{
            padding: 0;
            margin: 0;
        }

2>修改内容样式 (让第一个li展示)

.container{
            width: 30%;
            height: 30vh;
            
            margin: 40px auto;
        }
        .container .top_title{
            
            display: flex;
        }
        .container .top_title li{
            list-style: none;
            border: 1px solid black;
            margin-right: 2px;
            padding: 4px;
            cursor: pointer;
            border-bottom: none;
        }
        .container .top_title .first{
            color: #fff;
            background-color: lightgray;
            border-color: black;
        }
        .container .tab_content{
            border: 1px solid black;
            height: 30vh;
        }
        .container .tab_content div{
            height: 100%;
            background-color: aqua;
            display: none;
        }
        .container .tab_content div:first-child{
            display: block;
            background-color: lightblue;
        }

 3.js实现样式变化

    window.onload=function(){
            var tab_title_li=document.querySelectorAll(".top_title li")
            var tab_content_div=document.querySelectorAll(".tab_content div")
            console.log(tab_title_li)
            for(var i=0;i<tab_title_li.length;i++){
                // 初始化头部的index属性
                tab_title_li[i].setAttribute("index",i)

                // 绑定事件
                tab_title_li[i].onmouseenter=function(){
                    // 事件触发后标题部分样式有变化+
                    console.log(this)
                    for(var j=0;j<tab_title_li.length;j++){
                        tab_title_li[j].className=""
                    }
                    this.className="first"

                    // 内容部分变化
                    console.log(this.getAttribute("index"))
                    for(var k=0;k<tab_content_div.length;k++){
                        if(k==this.getAttribute("index")){
                            tab_content_div[k].style.display="block"
                            tab_content_div[k].style.background="lightblue";

                        }else{
                            tab_content_div[k].style.display="none"

                        }
                    }
                }
            }

2.多tab切换

实现效果:

实现步骤:

1.body部分多来几个tab元素
<body>
    <div class="container">
        <ul class="top_title">
            <li class="first" index="1">title1</li>
            <li index="2">title2</li>
            <li index="3">title3</li>
            <li index="4">title4</li>
        </ul>
        <div class="tab_content">
            <div>content1</div>
            <div>content2</div>
            <div>content3</div>
            <div>content4</div>
        </div>
    </div>
    <div class="container">
        <ul class="top_title">
            <li class="first" index="1">title1</li>
            <li index="2">title2</li>
            <li index="3">title3</li>
            <li index="4">title4</li>
        </ul>
        <div class="tab_content">
            <div>content1</div>
            <div>content2</div>
            <div>content3</div>
            <div>content4</div>
        </div>
    </div>
    <div class="container">
        <ul class="top_title">
            <li class="first" index="1">title1</li>
            <li index="2">title2</li>
            <li index="3">title3</li>
            <li index="4">title4</li>
        </ul>
        <div class="tab_content">
            <div>content1</div>
            <div>content2</div>
            <div>content3</div>
            <div>content4</div>
        </div>
    </div>
</body>
2.css样式设计

同以上相同

3.js实现切换

在这里需要注意每个数组的转换

 var container=document.querySelectorAll(".container")
            console.log(container)
            for(var h=0;h<container.length;h++){
                // console.log(container[h])
                // 每一组的标题部分
                var tab_title_li=container[h].querySelectorAll("li")
                console.log(tab_title_li)
                for(var i=0;i<tab_title_li.length;i++){
                    // 绑定index属性
                    tab_title_li[i].setAttribute("index",i)
                    // 绑定事件
                    tab_title_li[i].onmouseenter=function(){
                        // 样式切换
                        // console.log(this.parentNode.children)
                        var first_tab_title_li=this.parentNode.children
                        for(var j=0;j<first_tab_title_li.length;j++){
                            first_tab_title_li[j].className=""
                        }
                        this.className="first"

                        // 内容切换
                        // 获取当前被点击的元素身上的index属性值
                        var first_index=this.getAttribute("index")
                        // console.log(first_index)
                        // 获取被点击li所在的组内所有内容元素
                        var first_tab_content_div=this.parentNode.nextElementSibling.children
                        for(var k=0;k<first_tab_content_div.length;k++){
                            if(first_index==k){
                                first_tab_content_div[k].style.display="block"
                                first_tab_content_div[k].style.background="lightblue"

                            }else{
                                first_tab_content_div[k].style.display="none"

                            }
                        }


http://www.kler.cn/news/318385.html

相关文章:

  • 如何使用爬虫挖掘更多长尾关键词
  • HashMap五大核心问题总结
  • SpringMVC后续4
  • arm开发板通信
  • Goweb预防XSS攻击
  • 【算法笔记】二分查找 红蓝染色法
  • 前端——表格、列表标签
  • 【设计模式】创建型模式(三):单例模式
  • Rocky Linux 9安装mysqlclient库报错的解决方法
  • Sam Altman最新博文:智能时代将带来无限的智能和丰富的能源
  • LOGO设计新革命:5款AI工具让你秒变设计大师(必藏)
  • 16_Python的迭代器
  • 【Unity链接数据库01】Unity使用Oracle 数据库完成登录注册功能
  • Qt/C++ TCP调试助手V1.1 新增图像传输与接收功能(附发布版下载链接)
  • 每日算法1(快慢指针)
  • 实例讲解电动汽车故障分级处理策略及Simulink建模方法
  • 面试官:谈谈自己对IOC和AOP的理解? Part1
  • Unity 设计模式 之 结构型模式 -【适配器模式】【桥接模式】 【组合模式】
  • 前端读取PDF和DOCX文件(干货分享)
  • 基于深度学习的可再生能源的效率优化
  • thinkphp 做分布式服务+读写分离+分库分表+负载均衡(分区)(后续接着写)
  • 《线性代数》学渣笔记
  • ai论文写作指导有哪些?六款最火ai论文生成平台大推荐
  • AI 智能名片链动 2+1 模式商城小程序中的体验策略
  • 某文书网爬虫逆向
  • Flask建立的Web网站的can‘t open file C_Program问题的分析
  • MySQL学习笔记(持续更新中)
  • sprintf()函数的介绍及其用法
  • 从入门到精通:PHP 100个关键技术关键词
  • 常用的基于无线射频( UWB)室内定位技术的原理与算法