JavaScript实现tab栏切换

news2025/4/17 16:07:31

JavaScript实现tab栏切换

请添加图片描述

代码功能概述

这段代码实现了一个简单的选项卡(Tab)切换功能。它通过操作 HTML 元素的类名(class)来控制哪些选项卡(Tab)和对应的内容板块显示,哪些隐藏。基本思路是先移除所有选项卡和内容板块已有的“激活”类名,然后给指定的选项卡及其对应的内容板块添加“激活”类名,从而实现切换显示效果,并且初始默认显示第一个选项卡及其对应的内容。

代码详细解读

  1. 获取页面元素
var tabs = document.querySelectorAll('.tab');
var contents = document.querySelectorAll('.tab-content');

这里使用 document.querySelectorAll 方法分别获取了页面中所有类名为 tab 的元素(通常代表选项卡按钮等)和所有类名为 tab-content 的元素(通常代表每个选项卡对应的内容展示区域),并将它们分别存储在 tabscontents 变量中。

  1. 定义 showTab 函数
function showTab(tabNumber) {
    tabs.forEach((tab) => {
        tab.classList.remove('active-tab');
    });
    contents.forEach((content) => {
        content.classList.remove('active-content');
    });
    document.getElementById('tab-' + tabNumber).classList.add('active-tab');
    document.getElementById('content-' + tabNumber).classList.add('active-content');
}
- 首先,函数接受一个参数 `tabNumber`,这个参数用于指定要显示的选项卡的序号(从代码逻辑推测,应该对应着 HTML 中选项卡和内容板块相关元素的编号部分)。
- 然后,通过 `forEach` 方法遍历之前获取到的所有 `tabs` 元素,对于每一个 `tab` 元素,使用 `classList.remove` 方法移除名为 `active-tab` 的类名,这样做的目的是将所有选项卡都设置为非激活状态,清除之前可能存在的激活样式等。
- 接着,同样使用 `forEach` 方法遍历 `contents` 元素,对每个 `content` 元素移除 `active-content` 类名,即将所有内容板块都设置为隐藏或非激活状态。
- 最后,通过 `document.getElementById` 方法,根据传入的 `tabNumber` 拼接出对应的选项卡和内容板块的 `id`(例如 `tab-1` 和 `content-1` 这样的形式),然后分别给对应的选项卡元素添加 `active-tab` 类名,给对应的内容板块元素添加 `active-content` 类名,从而实现将指定的选项卡和其对应的内容板块设置为激活状态并显示出来的效果。
  1. 初始显示设置
showTab(1);

在脚本的最后调用了 showTab 函数并传入参数 1,这意味着页面加载时,默认会显示第一个选项卡(编号为 1 的选项卡及其对应的内容板块)处于激活状态。

可能的改进和注意事项

  1. 错误处理:代码没有对 document.getElementById 查找元素失败的情况进行处理,如果页面中不存在对应的 id 元素,代码会出现错误。可以添加适当的条件判断来避免这种情况,比如判断获取到的元素是否为 null,然后做相应的提示或处理。
  2. 动态添加元素情况:如果页面运行过程中会动态添加或删除选项卡及内容板块元素,那么 document.querySelectorAll 获取到的元素集合不会自动更新,可能导致后续切换功能出现异常。这时可能需要采用事件委托等方式来更好地处理元素变化情况。
  3. 可扩展性和灵活性:目前代码是基于固定的类名和 id 命名规则来实现功能的,如果想要更灵活地配置选项卡结构或者复用代码,可能需要将类名、id 相关的规则以及功能逻辑进一步封装成更可配置的形式,例如通过配置对象传入相关参数等。

总的来说,这段代码简洁地实现了选项卡切换的基本功能,但在实际应用中,根据具体的项目需求和页面交互情况,可能需要进一步优化和完善相关逻辑及错误处理机制。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .tabChange{
      width: 800px;
      height: auto;
    }
    .tabs{
      display: flex;
    }
    .tab{
      border: 1px solid #ccc;
      background-color: #f1f1f1;
      padding: 10px 20px;
      margin-right: 5px;
      cursor: pointer;
    }
    .tab-content{
      display: none !important;
    }
    .active-tab{
      background-color: #fff;
      border-bottom: none;
    }
    .active-content{
      display: flex !important;
      padding: 20px;
    }
    .col-img{
      margin-right: 30px;
    }
    .col-img > img{
      width: 200px;
      height: 200px;
    }
    .text >p{
      text-indent: 2em;
    }
  </style>
</head>
<body>
    <div class="tabchange">
      <div class="tabs">
        <div class="tab active-tab"id="tab-1"onclick="showTab(1)">派大星</div>
        <div class="tab" id="tab-2" onclick="showTab(2)">海绵宝宝</div>
        <div class="tab" id="tab-3" onclick="showTab(3)">章鱼哥</div>
        <div class="tab" id="tab-4" onclick="showTab(4)">蟹老板</div>
      </div>
      <div class="tab-content" id="content-1">
        <div class="col-img">
          <img src="C:\Users\Administrator\Desktop\python\.vs\ann.png" alt="">
        </div>
        <div class="text">
          <h3>派大星</h3>
          <p>派大星(Patrick Star),美国动画片《海绵宝宝》及其衍生作品中的角色,
            也是海绵宝宝的好朋友。他是一只粉红色的海星,说话嗓音粗,头脑简单,四肢发达,常给大家制造麻烦,
            在睡觉或发呆时还会不停的流口水。他居住在自己精心打磨的石头下面,在关键时刻会想出绝妙的点子,
            但下一秒就已经遗忘,可是在动画片中他却是说出最多饱含深意的话的角色。
          </p>
        </div>
        
        
      </div>
      <div class="tab-content" id="content-2">
        
        <div class="col-img">
          <img src="C:\Users\Administrator\Desktop\python\.vs\ann.png" alt="">
        </div>
        <div class="text">
          <h3>海绵宝宝</h3>
          <p>海绵宝宝(SpongeBob SquarePants)是美国动画中的角色,原设计名为“海绵男孩”,首次登场于1999年美国同名动画《海绵宝宝》,
            人物原型为海绵,
            美国配音为汤姆·肯尼,中国大陆配音为陈浩、赵路、李璐、王沄晨,中国台湾配音为魏伯勤。
          </p>
        </div>
        
        
      
      </div>
      <div class="tab-content"id="content-3">
        
        <div class="col-img">
          <img src="C:\Users\Administrator\Desktop\python\.vs\ann.png" alt="">
        </div>
        <div class="text">
          <h3>章鱼哥</h3>
          <p>蟹堡王的收银员,海绵宝宝的邻居兼同事、朋友,一只大鼻子秃脑门章鱼。
            认为海绵宝宝和派大星很幼稚。相当自恋,有一定的艺术才能但却从未得到赏识,并对艺术有执着的追求。
          </p>
        </div>
        
        
      
      </div>
      <div class="tab-content"id="content-4">
        
        <div class="col-img">
          <img src="C:\Users\Administrator\Desktop\python\.vs\image (1).jpg" alt="">
        </div>
        <div class="text">
          <h3>蟹老板</h3>
          <p>蟹老板(英文:Captain Eugene H. Armor Abs Krabs),美国动画片《海绵宝宝》系列中的主要角色之一,
            全名“尤金·H·阿尔莫·阿博斯·蟹Eugene H. Armor Abs Krabs”,为蟹堡王的老板。原型是一只螃蟹。
          </p>
        </div>
        
        
      </div>
    </div>
    <script>
      // 获取所有具有 '.tab' 类的DOM元素(标签)
      var tabs = document.querySelectorAll('.tab');
      // 获取所有具有 '.tab-content' 类的DOM元素(内容区域)
      var contents = document.querySelectorAll('.tab-content');
    
      // 定义 showTab 函数,用于切换标签页
      function showTab(tabNumber) {
        // 遍历所有标签,移除 'active-tab' 类以去除激活状态
        tabs.forEach(function(tab) {
          tab.classList.remove('active-tab');
        });
        // 遍历所有内容区域,移除 'active-content' 类以隐藏内容
        contents.forEach(function(content) {
          content.classList.remove('active-content');
        });
        // 为指定的标签添加 'active-tab' 类以显示为激活状态
        document.getElementById('tab-' + tabNumber).classList.add('active-tab');
        // 为对应的内容区域添加 'active-content' 类以显示内容
        document.getElementById('content-' + tabNumber).classList.add('active-content');
      }
    
      // 页面加载完成后,默认显示第一个标签页的内容
      showTab(1);
    </script>
</body>
</html> 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2253326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【天地图】HTML页面实现车辆轨迹、起始点标记和轨迹打点的完整功能

目录 一、功能演示 二、完整代码 三、参考文档 一、功能演示 运行以后完整的效果如下&#xff1a; 点击开始&#xff0c;小车会沿着轨迹进行移动&#xff0c;点击轨迹点会显示经纬度和时间&#xff1a; 二、完整代码 废话不多说&#xff0c;直接给完整代码&#xff0c;替换…

HCIA笔记6--路由基础与静态路由:浮动路由、缺省路由、迭代查找

文章目录 0. 概念1.路由器工作原理2. 跨网访问流程3. 静态路由配置4. 静态路由的应用场景4.1 路由备份4.2 浮动路由4.3 缺省路由 5. 迭代路由6 问题6.1 为什么路由表中有的下一跳的地址有接口&#xff1f;6.2 个人电脑的网关本质是什么&#xff1f; 0. 概念 自治系统&#xff…

20241129解决在Ubuntu20.04下编译中科创达的CM6125的Android10出现找不到库文件libncurses.so.5的问题

20241129解决在Ubuntu20.04下编译中科创达的CM6125的Android10出现找不到库文件libncurses.so.5的问题 2024/11/29 21:11 缘起&#xff1a;中科创达的高通CM6125开发板的Android10的编译环境需要。 vendor/qcom/proprietary/commonsys/securemsm/seccamera/service/jni/jni_if.…

Matlab搜索路径添加不上

发现无论是右键文件夹添加到路径&#xff0c;还是在“设置路径”中专门添加&#xff0c;我的路径始终添加不上&#xff0c;导致代码运行始终报错&#xff0c;后来将路径中的“”加号去掉后&#xff0c;就添加成功了&#xff0c;经过测试&#xff0c;路径中含有中文也可以添加成…

自由学习记录(28)

C# 中的流&#xff08;Stream&#xff09; 流&#xff08;Stream&#xff09;是用于读取和写入数据的抽象基类。 流表示从数据源读取或向数据源写入数据的矢量过程。 C# 中的流类是从 System.IO.Stream 基类派生的&#xff0c;提供了多种具体实现&#xff0c;每种实现都针对…

Redis3——线程模型与数据结构

Redis3——线程模型与数据结构 本文讲述了redis的单线程模型和IO多线程工作原理&#xff0c;以及几个主要数据结构的实现。 1. Redis的单线程模型 redis6.0之前&#xff0c;一个redis进程只有一个io线程&#xff0c;通过reactor模式可以连接大量客户端&#xff1b;redis6.0为了…

使用playwright自动化测试时,npx playwright test --ui打开图形化界面时报错

使用playwright自动化测试时&#xff0c;npx playwright test --ui打开图形化界面时报错 1、错误描述&#xff1a;2、解决办法3、注意符号的转义 1、错误描述&#xff1a; 在运行playwright的自动化测试项目时&#xff0c;使用npm run test无头模式运行正常&#xff0c;但使用…

深度学习模型:门控循环单元(GRU)详解

本文深入探讨了门控循环单元&#xff08;GRU&#xff09;&#xff0c;它是一种简化版的长短期记忆网络&#xff08;LSTM&#xff09;&#xff0c;在处理序列数据方面表现出色。文章详细介绍了 GRU 的基本原理、与 LSTM 的对比、在不同领域的应用以及相关的代码实现&#xff0c;…

用html+jq实现元素的拖动效果——js基础积累

用htmljq实现元素的拖动效果 效果图如下&#xff1a; 将【item10】拖动到【item1】前面 直接上代码&#xff1a; html部分 <ul id"sortableList"><li id"item1" class"w1" draggable"true">Item 1</li><li …

单片机学习笔记 12. 定时/计数器_定时

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…

【乐企文件生成工程】搭建docker环境,使用docker部署工程

1、自行下载docker 2、自行下载docker-compose 3、编写Dockerfile文件 # 使用官方的 OpenJDK 8 镜像 FROM openjdk:8-jdk-alpine# 设置工作目录 WORKDIR ./app# 复制 JAR 文件到容器 COPY ../lq-invoice/target/lq-invoice.jar app.jar # 暴露应用程序监听的端口 EXPOSE 1001…

React基础知识三 router路由全指南

现在最新版本是Router6和Router5有比较大的变化&#xff0c;Router5和Router4变化不大&#xff0c;本文以Router6的写法为主&#xff0c;也会对比和Router5的不同。比较全面。 安装路由 npm i react-router-dom基本使用 有两种Router&#xff0c;BrowserRouter和HashRouter&…

【C#】书籍信息的添加、修改、查询、删除

文章目录 一、简介二、程序功能2.1 Book类属性&#xff1a;方法&#xff1a; 2.2 Program 类 三、方法&#xff1a;四、用户界面流程&#xff1a;五、程序代码六、运行效果 一、简介 简单的C#控制台应用程序&#xff0c;用于管理书籍信息。这个程序将允许用户添加、编辑、查看…

打造去中心化交易平台:公链交易所开发全解析

公链交易所&#xff08;Public Blockchain Exchange&#xff09;是指基于公有链&#xff08;如以太坊、波场、币安智能链等&#xff09;建立的去中心化交易平台。与传统的中心化交易所&#xff08;CEX&#xff09;不同&#xff0c;公链交易所基于区块链技术实现资产交换的去中心…

CLIP模型也能处理点云信息

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

关于NXP开源的MCU_boot的项目心得

MCU的启动流程细查 注意MCU上电第一个函数运行的就是Reset_Handler函数&#xff0c;下图是表示了这个函数做了啥事情&#xff0c;注意加强一下对RAM空间的段的印象&#xff0c;从上到下是栈&#xff0c;堆&#xff0c;.bss段&#xff0c;.data段。 bootloader的难点 固件完…

MySQL5.6升级MySQL5.7

升级方式介绍 08 数据库服务版本升级方法 5.6 – 5.7 – 8.0 数据库版本升级方法&#xff1a; Inplace-本地升级 步骤一&#xff1a;在同一台服务器中&#xff0c;需要部署高版本数据库服务实例步骤二&#xff1a;低版本数据库中的数据进行备份迁移&#xff0c;迁移到高版本…

怎么理解BeamSearch?

在大模型推理中&#xff0c;常会用到BeamSearch&#xff0c;本文就BeamSearch原理与应用理解展开讲解。 一、BeamSearch原理 Beam Search 是一种启发式搜索算法&#xff0c;常用于自然语言处理&#xff08;NLP&#xff09;和其他需要生成序列的任务中&#xff0c;比如机器翻译…

shodan2-批量查找CVE-2019-0708漏洞

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…

SciPy Optimize和 CVXPY对比

CVXPY和SciPy Optimize模块都是在Python中解决优化问题的强大工具&#xff0c;但它们是为不同类型的问题而设计的&#xff0c;具有不同的优点和局限性。本文对比两者的优缺点&#xff0c;阐述各自的应用场景&#xff0c;同时解释常用求解器&#xff0c;并给出实际示例进行说明。…