這篇文章主要介紹了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> <p id="tanContainer"> <p id="tab"> <ul> <li>标题一</li> <li>标题二</li> <li>标题三</li> <li>标题四</li> </ul> </p> <p id="tabCon"> <p>内容一</p> <p>内容二</p> <p>内容三</p> <p>内容四</p> </p> </p> </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> <p id="tanContainer"> <p id="tabNav"> <ul> <li onclick="tab('tab1')">标题一</li> <li onclick="tab('tab2')">标题二</li> <li onclick="tab('tab3')">标题三</li> <li onclick="tab('tab4')">标题四</li> </ul> </p> <p id="tab"> <p id="tab1">内容一</p> <p id="tab2">内容二</p> <p id="tab3">内容三</p> <p id="tab4">内容四</p> </p> </p> </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>
<p id="tanContainer">
<p id="tab">
<ul>
<li onclick="changeTab('0')">标题一</li>
<li onclick="changeTab('1')">标题二</li>
<li onclick="changeTab('2')">标题三</li>
<li onclick="changeTab('3')">标题四</li>
</ul>
</p>
<p id="tabCon">
<p id="tabCon_0">内容一</p>
<p id="tabCon_1">内容二</p>
<p id="tabCon_2">内容三</p>
<p id="tabCon_3">内容四</p>
</p>
</p>
</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 p {
display:none;
}
#tabCon p.fp {
display:block;
}
</style>
</head>
<body>
<p id="tanContainer">
<p id="tab">
<ul>
<li class="fli">标题一</li>
<li>标题二</li>
<li>标题三</li>
<li>标题四</li>
</ul>
</p>
<p id="tabCon">
<p class="fp">内容一</p>
<p>内容二</p>
<p>内容三</p>
<p>内容四</p>
</p>
</p>
</body>
<script>
var tabs=document.getElementById("tab").getElementsByTagName("li");
var ps=document.getElementById("tabCon").getElementsByTagName("p");
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";
ps[i].className="fp";
}else{
tabs[i].className="";
ps[i].className="";
}
}
}
</script>
</html>
<!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>
<p 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>
<p class="panels">
<p class="panel">
<p>内容一</p>
</p>
<p class="panel">
<p>内容二</p>
</p>
</p>
</p>
</body>
</html>