JavaScript实现tab栏切换
JavaScript实现tab栏切换

代码功能概述
这段代码实现了一个简单的选项卡(Tab)切换功能。它通过操作 HTML 元素的类名(class)来控制哪些选项卡(Tab)和对应的内容板块显示,哪些隐藏。基本思路是先移除所有选项卡和内容板块已有的“激活”类名,然后给指定的选项卡及其对应的内容板块添加“激活”类名,从而实现切换显示效果,并且初始默认显示第一个选项卡及其对应的内容。
代码详细解读
- 获取页面元素:
var tabs = document.querySelectorAll('.tab');
var contents = document.querySelectorAll('.tab-content');
这里使用 document.querySelectorAll 方法分别获取了页面中所有类名为 tab 的元素(通常代表选项卡按钮等)和所有类名为 tab-content 的元素(通常代表每个选项卡对应的内容展示区域),并将它们分别存储在 tabs 和 contents 变量中。
- 定义
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` 类名,从而实现将指定的选项卡和其对应的内容板块设置为激活状态并显示出来的效果。
- 初始显示设置:
showTab(1);
在脚本的最后调用了 showTab 函数并传入参数 1,这意味着页面加载时,默认会显示第一个选项卡(编号为 1 的选项卡及其对应的内容板块)处于激活状态。
可能的改进和注意事项
- 错误处理:代码没有对
document.getElementById查找元素失败的情况进行处理,如果页面中不存在对应的id元素,代码会出现错误。可以添加适当的条件判断来避免这种情况,比如判断获取到的元素是否为null,然后做相应的提示或处理。 - 动态添加元素情况:如果页面运行过程中会动态添加或删除选项卡及内容板块元素,那么
document.querySelectorAll获取到的元素集合不会自动更新,可能导致后续切换功能出现异常。这时可能需要采用事件委托等方式来更好地处理元素变化情况。 - 可扩展性和灵活性:目前代码是基于固定的类名和
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>
相关文章:
JavaScript实现tab栏切换
JavaScript实现tab栏切换 代码功能概述 这段代码实现了一个简单的选项卡(Tab)切换功能。它通过操作 HTML 元素的类名(class)来控制哪些选项卡(Tab)和对应的内容板块显示,哪些隐藏。基本思路是先…...
精确电压输出,家电和工业设备的完美选择,宽输入电压线性稳压器
WD5201线性稳压器的核心内容概述: 主要特点 • 高精度输出电压:2%精度。 • 输出电压可调:支持5V、3.3V、2.7V三档输出。 • 优化控制方式:提升效率。 • 宽输入电压范围:80305VAC。 • 无需功率电感和输入高压电…...
深入理解定时器:优先队列与时间轮实现
文章目录 1. 线程池概述线程池的基本特点: 2. 使用线程池的优先队列定时器实现2.1 优先队列定时器实现2.2 解释: 3. 使用时间轮的线程池定时器实现3.1 时间轮定时器实现 4. 总结 在定时器设计中,使用线程池来执行定时任务可以有效提高程序的性…...
autogen-agentchat 0.4.0.dev8版本的安装
1. 安装命令 pip install autogen-agentchat0.4.0.dev8 autogen-ext[openai]0.4.0.dev82. 版本检查 import autogen_agentchat print(autogen_agentchat.__version__)0.4.0.dev8import autogen_ext print(autogen_ext.__version__)0.4.0.dev83. 第一个案例 使用 autogen-age…...
JAVA |日常开发中读写XML详解
JAVA |日常开发中读写XML详解 前言一、XML 简介二、在 Java 中读取 XML2.1 使用 DOM(Document Object Model)方式读取 XML2.2 使用 SAX(Simple API for XML)方式读取 XML 三、在 Java 中写入 XML3.1 使用 DOM 方式写入…...
React 路由与组件通信:如何实现路由参数、查询参数、state和上下文的使用
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
帮我写一篇关于AI搜索网页上编写的文章是否存在版权问题的文章, 字数在 3000 字左右。文心一言提问, 记录后用.
AI搜索网页上编写的文章是否存在版权问题? 在当今科技飞速发展的时代,AI搜索工具如雨后春笋般涌现,为人们获取信息提供了极大的便利。然而,随之而来的问题是,AI搜索案例中常常出现很多内容缺乏依据,这引发…...
电脑关机的趣味小游戏——system函数、strcmp函数、goto语句的使用
文章目录 前言一. system函数1.1 system函数清理屏幕1.2 system函数暂停运行1.3 system函数电脑关机、重启 二、strcmp函数三、goto语句四、电脑关机小游戏4.1. 程序要求4.2. 游戏代码 总结 前言 今天我们写一点稍微有趣的代码,比如写一个小程序使电脑关机…...
AttributeError: ‘DataFrame‘ object has no attribute ‘append‘的参考解决方法
文章目录 写在前面一、问题描述二、解决方法参考链接 写在前面 自己的测试环境: Ubuntu20.04 一、问题描述 运行开源的python代码的时候,遇到如下问题 AttributeError: DataFrame object has no attribute append二、解决方法 报错中的DataFrame是在…...
java垃圾回收机制介绍
Java垃圾回收机制(Garbage Collection, GC)是Java编程语言中的一项重要特性,它自动管理内存,释放不再使用的对象 1. 堆(Heap): • Java虚拟机(JVM)中用于存储对象实例的内…...
SpringMVC跨域问题解决方案
当Web应用程序尝试从一个源(例如 http://localhost:9090)向另一个不同的源(例如 http://localhost:8080)发起请求时,发现报错: 报错原因:请求被CORS策略拦截了 跨域问题概述 当Web应用程序尝试…...
【语音识别】Zipformer
Zipformer 是kaldi 团队于2024研发的序列建模模型。相比较于 Conformer、Squeezeformer、E-Branchformer等主流 ASR 模型,Zipformer 具有效果更好、计算更快、更省内存等优点。并在 LibriSpeech、Aishell-1 和 WenetSpeech 等常用数据集上取得了当时最好的 ASR 结果…...
vue+uniapp+echarts的使用(H5环境下echarts)
1.安装 npm install echarts4.9.0 --save // 带版本号 2.main.js中全局引用 // import echarts from echarts // 如果是5.0以上版本用这个 import * as echarts from echarts Vue.prototype.$echartsecharts 3.使用 <template><view id"box" style"w…...
【Python网络爬虫笔记】7-网络爬虫的搜索工具re模块
目录 一、网络爬虫中的正则表达式和re模块(一)数据提取的精确性(二)处理复杂的文本结构(三)提高数据处理效率 二、正则表达式的内涵(一)、常用元字符(二)、量…...
为什么选择 React Native 作为跨端方案
为什么选择 React Native 作为跨端方案 我深刻地知道,没有完美的跨端技术,只有适合的场景。脱离适用场景去谈跨端技术没有什么意义。 适用场景 1. 业务更新迭代较快的团队与出海团队 React Native 特别适合那些业务更新频繁、需要快速响应市场的团队…...
服务器与普通电脑有什么区别?
服务器和普通电脑(通常指的是个人计算机,即PC)有众多相似之处,主要构成包含:CPU,内存,芯片,I/O总线设备,电源,机箱及操作系统软件等,鉴于使用要求…...
Oracle 12c Data Guard 环境中的 GAP 修复方法
概述 上文中提到Oracle 12c 引入了多项新技术来简化 Data Guard 环境中的 GAP 修复过程,如(RECOVER … FROM SERVICE)。这些新特性不仅减少了操作步骤,还提高了效率和准确性。本文档将详细说明如何利用这些新特性进行 GAP 修复。…...
力扣 三角dp
动态规划基础题,当前所在元素来自上一行的两列的值。 题目 从图可以看出,每一行的第一个数与最后一个数都是1,然后中间的数是来自它左上方和右上方的数的和。当然并不是要打印这个三角形的形状,因此可以想到正常的打印方式应该是…...
SQL基础语法全解析(上篇)
一、基本概念 1. 数据库术语 数据库(database) - 保存有组织的数据的容器(通常是一个文件或一组文件)。数据表(table) - 某种特定类型数据的结构化清单。模式(schema) - 关于数据库…...
【笔记】Linux服务器端使用百度网盘
1、在python环境下,下载bypy pip install bypy 2、第一次连接需要认证 bypy info 认证通过后百度网盘会出现bypy文件夹,如下 3、查看当前文件夹下的文件 bypy list 若有很多文件夹,可在后面增加文件夹名称,列出对应位置下的文件&a…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
