JavaScript实现tab栏切换

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.rhkb.cn/news/483691.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【娱乐项目】基于cnchar库与JavaScript的汉字查询工具

Demo介绍 利用了 cnchar 库来进行汉字相关的信息查询&#xff0c;并展示了汉字的拼音、笔画数、笔画顺序、笔画动画等信息用户输入一个汉字后&#xff0c;点击查询按钮&#xff0c;页面会展示该汉字的拼音、笔画数、笔画顺序&#xff0c;并绘制相应的笔画动画和测试图案 cnchar…

组合问题变式——选数(dfs)

代码随想录听课笔记1——回溯算法-CSDN博客 这是从1&#xff0c;2&#xff0c;3...,n个数字中选出k个数的组合&#xff0c;输出组合的全部可能的代码 //组合&#xff1a;返回1-n中所有个数为k的组合 1,2,3,4 #include<bits/stdc.h> using namespace std; #define MAX 1…

C++知识整理day3类与对象(下)——赋值运算符重载、取地址重载、列表初始化、友元、匿名对象、static

文章目录 1.赋值运算符重载1.1 运算符重载1.2 赋值运算符重载 2.取地址重载2.1 const成员函数2.2 取地址运算符重载 3.类与对象的补充3.1 再探构造函数---初始化列表3.2 类型转换3.3 static成员3.4 友元3.5 内部类3.6 匿名对象3.7 对象拷贝时的编译器优化 1.赋值运算符重载 赋…

<数据集>路面坑洼识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;665张 标注数量(xml文件个数)&#xff1a;665 标注数量(txt文件个数)&#xff1a;665 标注类别数&#xff1a;1 标注类别名称&#xff1a;[pothole] 序号类别名称图片数框数1pothole6651740 使用标注工具&#x…

Oracle篇—通过官网下载最新的数据库软件或者历史数据库软件

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…

dns实验3:主从同步-完全区域传输

服务器192.168.234.111&#xff08;主服务器&#xff09;&#xff0c;打开配置文件&#xff1a; 打开配置文件&#xff1a; 关闭防火墙&#xff0c;改宽松模式&#xff1a; 重启服务&#xff1a; 服务器192.168.234.112&#xff08;从服务器&#xff09;&#xff0c;打开配置文…

OpenCV圆形标定板检测算法findCirclesGrid原理详解

OpenCV的findCirclesGrid函数检测圆形标定板的流程如下:   findCirclesGrid函数源码: //_image,输入图像 //patternSize,pattern的宽高 //_centers,blobs中心点的位置 //flags,pattern是否对称 //blobDetector,这里使用的是SimpleBlobDetector bool cv::findCirclesGrid(…

Java - JSR223规范解读_在JVM上实现多语言支持

文章目录 1. 概述2. 核心目标3. 支持的脚本语言4. 主要接口5. 脚本引擎的使用执行JavaScript脚本执行groovy脚本1. Groovy简介2. Groovy脚本示例3. 如何在Java中集成 Groovy4. 集成注意事项 6. 与Java集成7. 常见应用场景8. 优缺点9. 总结 1. 概述 JSR223&#xff08;Java Spe…

自然语言处理:基于BERT预训练模型的中文命名实体识别(使用PyTorch)

命名实体识别&#xff08;NER&#xff09; 命名实体识别&#xff08;Named Entity Recognition, NER&#xff09;是自然语言处理&#xff08;NLP&#xff09;中的一个关键任务&#xff0c;其目标是从文本中识别出具有特定意义的实体&#xff0c;并将其分类到预定义的类别中。这…

【C++】数组

1.概述 所谓数组&#xff0c;就是一个集合&#xff0c;该集合里面存放了相同类型的数据元素。 数组特点&#xff1a; &#xff08;1&#xff09;数组中的每个数据元素都是相同的数据类型。 &#xff08;2&#xff09;数组是有连续的内存空间组成的。 2、一维数组 2.1维数组定…

微软表示不会使用你的 Word、Excel 数据进行 AI 训练

​微软否认使用 Microsoft 365 应用程序&#xff08;包括 Word、Excel 和 PowerPoint&#xff09;收集数据来训练公司人工智能 (AI) 模型的说法。 此前&#xff0c;Tumblr 的一篇博文声称&#xff0c;雷德蒙德使用“互联体验”功能抓取客户的 Word 和 Excel 数据&#xff0c;用…

leetcode--螺旋矩阵

LCR 146.螺旋遍历二维数组 给定一个二维数组 array&#xff0c;请返回「螺旋遍历」该数组的结果。 螺旋遍历&#xff1a;从左上角开始&#xff0c;按照 向右、向下、向左、向上 的顺序 依次 提取元素&#xff0c;然后再进入内部一层重复相同的步骤&#xff0c;直到提取完所有元…

C++ 分治

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 1.分治法 2.二分搜索 函数传参——数组 3.棋盘覆盖 4.合并排序 5.快速排序 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 1.分治法 基…

Spark常问面试题---项目总结

一、数据清洗&#xff0c;你都清洗什么&#xff1f;或者说 ETL 你是怎么做的&#xff1f; 我在这个项目主要清洗的式日志数据&#xff0c;日志数据传过来的json格式 去除掉无用的字段&#xff0c;过滤掉json格式不正确的脏数据 过滤清洗掉日志中缺少关键字段的数据&#xff…

基于智能语音交互的智能呼叫中心工作机制

在智能化和信息化不断进步的现代&#xff0c;智能呼叫中心为客户提供高质量、高效率的服务体验&#xff0c;提升众多品牌用户的满意度和忠诚度。作为实现智能呼叫中心的关键技术之一的智能语音交互技术&#xff0c;它通过集成自然语言处理&#xff08;NLP&#xff09;、语音识别…

Android Studio 右侧工具栏 Gradle 不显示 Task 列表

问题&#xff1a; android studio 4.2.1版本更新以后AS右侧工具栏Gradle Task列表不显示&#xff0c;这里需要手动去设置 解决办法&#xff1a; android studio 2024.2.1 Patch 2版本以前的版本设置&#xff1a;依次打开 File -> Settings -> Experimental 选项&#x…

SpringBoot集成Kafka和avro和Schema注册表

Schema注册表 为了提升kafka的性能&#xff0c;减少网络传输和存储的数据大小&#xff0c;可以把数据的schema部分单独存储到外部的schema注册表中&#xff0c;整体架构如下图所示&#xff1a; 1&#xff09;把所有数据需要用到的 schema 保存在注册表里&#xff0c;然后在记…

http(请求方法,状态码,Cookie与)

目录 1.http中常见的Header(KV结构) 2.http请求方法 2.1 请求方法 2.2 telnet 2.3 网页根目录 2.3.1 概念 2.3.2 构建一个首页 2.4 GET与POST方法 2.4.1 提交参数 2.4.2 GET与POST提交参数对比 2.4.3 GET和POST对比 3.状态码 3.1 状态码分类 3.2 3XXX状态码 3.2 …

十,[极客大挑战 2019]Secret File1

点击进入靶场 查看源代码 有个显眼的紫色文件夹&#xff0c;点击 点击secret看看 既然这样&#xff0c;那就回去查看源代码吧 好像没什么用 抓个包 得到一个文件名 404 如果包含"../"、"tp"、"input"或"data"&#xff0c;则输出"…

pytest自定义命令行参数

实际使用场景&#xff1a;pytest运行用例的时候&#xff0c;启动mitmdump进程试试抓包&#xff0c;pytest命令行启动的时候&#xff0c;传入mitmdump需要的参数&#xff08;1&#xff09;抓包生成的文件地址 &#xff08;2&#xff09;mitm的proxy设置 # 在pytest的固定文件中…