JavaScript实现Tab栏切换效果:原理与代码详解
本文详解如何使用JavaScript实现Tab栏切换效果。通过HTML构建结构,CSS控制样式与隐藏显示,JS利用排他算法处理点击事件。核心逻辑包括为标签添加索引属性,遍历绑定点击事件,通过清空所有类名和显示状态,再为当前选中项应用样式和显示对应内容,实现交互切换。
Tab栏的核心功能是:当用户点击不同的标签时,页面会显示对应的内容,同时被点击的标签会呈现特殊的视觉样式(如颜色或背景变化),以明确标识当前选中的标签。
实现这一功能的基本思路如下:
1、将tab栏分为上下两部分,上面是导航列表,下面是各部分对应的内容。把标签和内容都写出来,内容按照标签顺序依次顺着写,给标签都添加自定义属性- - -index,属性值从0开始,依次增加1
接下来实现上部的交互效果:点击标签后,切换其视觉样式(如字体颜色和背景色)。具体步骤为:
① 在CSS中定义一个类(例如 .current),用于设定选中状态的样式。初始状态下,仅给第一个标签添加该类名,其余标签不添加。\n② 在JavaScript中,获取所有导航标签的元素对象,使用 for 循环遍历每个标签,并为其绑定 onclick 点击事件。\n③ 在点击事件处理函数中,应用“排他算法”:首先通过 for 循环遍历所有标签,将它们的 className 设置为空字符串(即移除所有类名);然后将当前被点击的标签(通过 this 指向)的 className 设置为之前定义的 .current 类名。
随后实现下部的内容切换:根据点击的标签,显示对应的内容区域。
① 在CSS中,默认显示第一个标签对应的内容,隐藏其他所有内容区域。
.box-tb .item:nth-child(n+2) {
display: none;
}
② 在JavaScript中,获取所有内容区域的元素对象。在点击事件内部,再次应用排他思想:通过 for 循环遍历所有内容元素,将它们的 style.display 设置为 'none'(隐藏);然后根据当前点击标签的 index 值,找到对应的内容元素,将其 style.display 设置为 'block'(显示)。
以下是完整的代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>tab栏切换</title>
<style>
* {
margin: 0;
padding: 0;
}
li {
list-style: none;
}
.box {
width: 600px;
margin: 100px auto;
}
.box-th {
overflow: hidden;
width: 100%;
background-color: #88ace6;
}
.box-th ul li {
float: left;
width: 90px;
height: 20px;
margin-right: 10px;
padding: 5px;
text-align: center;
}
.current {
color: #fff;
background-color: green;
}
.box-tb {
margin-top: 20px;
}
.box-tb .item:nth-child(n+2) {
display: none;
}
</style>
</head>
<body>
<div class="box">
<div class="box-th">
<ul>
<li data-index="0" class="current">春</li>
<li data-index="1">夏</li>
<li data-index="2">秋</li>
<li data-index="3">冬</li>
</ul>
</div>
<div class="box-tb">
<div class="item">春季排四季之首,新的轮回从此开启。春,代表着温暖、生长,植物发芽,风和日暖,鸟语花香。这季节的气温、日照、降雨,处于一年中的转折点,趋于上升或增多。春季,阴阳之气开始转变,万物随阳气上升而萌牙生长,春季是万物生长、春耕播种的季节,所谓“一年之计在于春”。 春季起始—结束: 依据天象变化划分:传统上是以“立春”(斗指寅,太阳达黄经315°时)作为春季的起点,至“立夏”结束。 依据气温变化划分:近代采用学者张宝堃的“候平均气温”划分,以候平均温度(连续5天气温的平均)从10℃以下稳定升到10℃以上时作为春季开始,至候平均温度22℃以上(入夏)时结束。
</div>
<div class="item">夏季万物至此皆盛,是农作物进入旺季生长的一个季节。温度升高,天气炎热,狂风暴雨频发,万物盛长。夏季是风暴最多的季节,常伴随着大风、暴雨。北半球夏季,大陆受热气压上升形成低气压,海洋恒温温度相对较低形成高气压,根据环流,夏季吹的是东南风。夏季北半球各地的白昼时间全年最长。 夏季起始—结束: 依据天象变化划分:以“立夏”(斗指东南,太阳达黄经45°)作为夏季的起点,至“立秋”结束。 依据气温变化划分:以候平均温度稳定升到22℃以上时作为夏季开始,至候平均温度22℃以下时结束。
</div>
<div class="item">秋季是收获季节,意味着万物开始从繁茂成长趋向萧索成熟。秋季的前两个节气立秋、处暑,还是酷热天气,因太阳所带来的热力未减弱,所谓“热在三伏”,三伏天出现在小暑与处暑之间,是一年中气温最高且又潮湿、闷热的日子。造成三伏天湿度高原因是,三伏天吹东南风,而东南方是太平洋和印度洋,空气潮湿,风的潮湿造成了三伏天湿度大;到了深秋之后则相反,吹西北风,而西北方是干燥的内陆,干燥的西北风造成深秋之后气候干燥。秋季前两个节气的气候特征为潮湿、闷热,秋季真正凉爽一般要到白露节气之后,自白露起渐渐趋向凉爽、干燥。随着进入深秋,气候由热转凉,万物随寒气增长,逐渐萧落,这是热与冷交替的季节。秋季最明显的变化草木的叶子从繁茂的绿色到发黄,并开始落叶庄稼则开始成熟。
[1] 秋季起始—结束: 依据天象变化划分:以“立秋”(斗指西南,太阳达黄经135°)作为秋季的起点,至“立冬”结束。 依据气温变化划分:以候平均温度从22℃以上稳定降到22℃以下作为秋季开始,至候平均温度降到10℃以下时结束。
</div>
<div class="item">冬季,阴阳转变,万物由收到藏,植物生气闭蓄。进入立冬后意味着秋季少雨干燥气候渐过去,转为阴雨寒冻的冬季气候特征。北半球的太阳高度小,白昼时间短。所谓“热在三伏”,冷在三九”,冬至为"一九天",冬至之前还不算很冷,冬至过后强冷空气南下频繁,并越过了南岭,气温骤降,天气寒冷。冬季真正寒冷,是在冬至后。 冬季起始—结束: 依据天象变化划分:以“立冬”(斗指西北,太阳达黄经225°)作为冬季的起点,至下一“立春”结束。 依据气温变化划分:以候平均温度稳定降到10℃以下为冬季的开始,至候平均温度10℃以上时结束。
</div>
</div>
</div>
<script>
var list = document.querySelector('.box-th').querySelectorAll('li');
var items = document.querySelector('.box-tb').querySelectorAll('.item');
for (var i = 0; i < list.length; i++) {
list[i].onclick = function() {
// 导航栏样式切换,排他算法
for (var i = 0; i < list.length; i++) {
list[i].className = '';
}
this.className = 'current';
// 下面展示内容切换,排他算法
var index = this.getAttribute('data-index');
for (var i = 0; i < items.length; i++) {
items[i].style.display = 'none';
}
items[index].style.display = 'block';
}
}
</script>
</body>
</html>
页面最终效果如下图所示:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
anime.js 快速入门:怎么引入库并编写第一个 DOM 动画
2026-11-05 14:22:43
在线JS解密后变量名仍乱码?结合浏览器DevTools调试还原
2026-11-04 20:26:01
怎么在浏览器中运行JavaScript代码并查看输出结果
2026-11-04 09:07:33
JS 获取屏幕分辨率:window.screen.width 与 height 用法
2026-11-04 08:52:48
为什么推荐用DOMContentLoaded代替window.onload初始化JS
2026-11-04 08:42:33
