javascript实现tab切换的四种方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
javascript实现tab切换的四种⽅法
tab切换在⽹页中很常见,故最近总结了4种实现⽅法。
⾸先,写出tab的框架,加上最简单的样式,代码如下:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
*{
padding: 0;
margin: 0;
}
li{
list-style: none;
float:left;
}
#tabCon{
clear: both;
}
</style>
</head>
<body>
<div id="tanContainer">
<div id="tab">
<ul>
<li>标题⼀</li>
<li>标题⼆</li>
<li>标题三</li>
<li>标题四</li>
</ul>
</div>
<div id="tabCon">
<div>内容⼀</div>
<div>内容⼆</div>
<div>内容三</div>
<div>内容四</div>
</div>
</div>
</body>
</html>
现在的显⽰效果如下图:
四个tab标题和四个内容区都显⽰在了页⾯中,现在要实现tab切换效果,即点击标题⼀,内容⼀显⽰出来,其他内容不显⽰;点击标题⼆,内容⼆显⽰出来,其他内容不显⽰……
那么,整体思路很简单,给四个标题绑定事件,触发的时候对应的内容显⽰,其他的内容隐藏。
⽅法⼀:点击标题对应的内容显⽰,⾮点击标题对应的内容隐藏。
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
*{
padding: 0;
margin: 0;
}
li{
list-style: none;
}
</style>
<script>
function tab(pid){
var tabs=["tab1","tab2","tab3","tab4"];
for(var i=0;i<4;i++){
if(tabs[i]==pid){
document.getElementById(tabs[i]).style.display="block";
}else{
document.getElementById(tabs[i]).style.display="none";
}
}
}
</script>
</head>
<body>
<div id="tanContainer">
<div id="tabNav">
<ul>
<li onclick="tab('tab1')">标题⼀</li>
<li onclick="tab('tab2')">标题⼆</li>
<li onclick="tab('tab3')">标题三</li>
<li onclick="tab('tab4')">标题四</li>
</ul>
</div>
<div id="tab">
<div id="tab1">内容⼀</div>
<div id="tab2">内容⼆</div>
<div id="tab3">内容三</div>
<div id="tab4">内容四</div>
</div>
</div>
</body>
</html>
⽅法⼆:先设置所有内容隐藏,然后点击标题对⽤的内容显⽰。
代码如下: <!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
*{
padding: 0;
margin: 0;
}
li{
list-style: none;
float:left;
}
#tabCon{
clear: both;
}
#tabCon_1{
display: none;
}
#tabCon_2{
display: none;
}
#tabCon_3{
display: none;
}
</style>
<script>
function changeTab(tabCon_num){
for(i=0;i<=3;i++) {
document.getElementById("tabCon_"+i).style.display="none"; //将所有的层都隐藏
}
document.getElementById("tabCon_"+tabCon_num).style.display="block";//显⽰当前层 }
</script>
</head>
<body>
<div id="tanContainer">
<div id="tab">
<ul>
<li onclick="changeTab('0')">标题⼀</li>
<li onclick="changeTab('1')">标题⼆</li>
<li onclick="changeTab('2')">标题三</li>
<li onclick="changeTab('3')">标题四</li>
<div id="tabCon">
<div id="tabCon_0">内容⼀</div>
<div id="tabCon_1">内容⼆</div>
<div id="tabCon_2">内容三</div>
<div id="tabCon_3">内容四</div>
</div>
</div>
</body>
</html>
⽅法三:显⽰和隐藏通过是有拥有class控制,先把所有的内容隐藏dispaly设为none,⽽该class的display设置为block,遍历所有标题节点和内容节点,点击标题后,该标题节点和对⽤的内容节点拥有class,其他的没有。
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
*{
padding: 0;
margin: 0;
}
li{
list-style: none;
float:left;
}
#tabCon {
clear: both;
}
#tabCon div {
display:none;
}
#tabCon div.fdiv {
display:block;
}
</style>
</head>
<body>
<div id="tanContainer">
<div id="tab">
<ul>
<li class="fli">标题⼀</li>
<li>标题⼆</li>
<li>标题三</li>
<li>标题四</li>
</ul>
</div>
<div id="tabCon">
<div class="fdiv">内容⼀</div>
<div>内容⼆</div>
<div>内容三</div>
<div>内容四</div>
</div>
</div>
</body>
<script>
var tabs=document.getElementById("tab").getElementsByTagName("li");
var divs=document.getElementById("tabCon").getElementsByTagName("div");
for(var i=0;i<tabs.length;i++){
tabs[i].onclick=function(){change(this);}
}
function change(obj){
for(var i=0;i<tabs.length;i++){
if(tabs[i]==obj){
tabs[i].className="fli";
divs[i].className="fdiv";
}else{
tabs[i].className="";
divs[i].className="";
}
}
}
该⽅法的缺点是,内容块的div下⾯不能再有div标签了。
⽅法四:不⽤js,⽤“input:checked”来做tab切换,先把所有的内容隐藏,被选中的内容显⽰。
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>input:checked实现tab切换</title>
<style>
input{
opacity: 0;/*隐藏input的选择框*/
}
label{
cursor: pointer;/*⿏标移上去变成⼿状*/
float: left;
}
label:hover{
background: #eee;
}
input:checked+label{
color: red;
}
/*选择前⾯有.tabs input:nth-of-type(x):checked的.panels .panel:nth-child(x)*/
.tabs input:nth-of-type(1):checked~.panels .panel:nth-child(1),
.tabs input:nth-of-type(2):checked~.panels .panel:nth-child(2){
opacity: 1;
}
.panel{
opacity: 0;
position: absolute;/*使内容区域位置⼀样*/
}
</style>
</head>
<body>
<div class="tabs">
<input checked id="one" name="tabs" type="radio">
<label for="one">标题⼀</label>
<input id="two" name="tabs" type="radio">
<label for="two">标题⼆</label>
<div class="panels">
<div class="panel">
<p>内容⼀</p>
</div>
<div class="panel">
<p>内容⼆</p>
</div>
</div>
</div>
</body>
</html>
该⽅法的缺点是,不同区域切换只能通过点击。
如果⼤家还想深⼊学习,可以点击两个精彩的专题:
以上就是为⼤家总结的tab切换实现⽅法,希望对⼤家的学习有所帮助,顺着这个思路动⼿制作⾃⼰tab切换特效。