tab切换在网页中很常见,故最近总结了3中实现方法。
首先,写出tab的框架,加上最简单的样式,代码如下:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <style> 6 *{ 7 padding: 0; 8 margin: 0; 9 } 10 li{ 11 list-style: none; 12 float:left; 13 } 14 #tabCon{ 15 clear: both; 16 } 17 </style> 18 </head> 19 <body> 20 <div id="tanContainer"> 21 <div id="tab"> 22 <ul> 23 <li>标题一</li> 24 <li>标题二</li> 25 <li>标题三</li> 26 <li>标题四</li> 27 </ul> 28 </div> 29 <div id="tabCon"> 30 <div>内容一</div> 31 <div>内容二</div> 32 <div>内容三</div> 33 <div>内容四</div> 34 </div> 35 </div> 36 </body> 37 </html>
现在的显示效果如下图:
四个tab标题和四个内容区都显示在了页面中,现在要实现tab切换效果,即点击标题一,内容一显示出来,其他内容不显示;点击标题二,内容二显示出来,其他内容不显示……
那么,整体思路很简单,给四个标题绑定事件,触发的时候对应的内容显示,其他的内容隐藏。
方法一:点击标题对应的内容显示,非点击标题对应的内容隐藏。代码如下:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <style> 6 *{ 7 padding: 0; 8 margin: 0; 9 } 10 li{ 11 list-style: none; 12 } 13 </style> 14 <script> 15 function tab(pid){ 16 var tabs=["tab1","tab2","tab3","tab4"]; 17 for(var i=0;i<4;i++){ 18 if(tabs[i]==pid){ 19 document.getElementById(tabs[i]).style.display="block"; 20 }else{ 21 document.getElementById(tabs[i]).style.display="none"; 22 } 23 } 24 } 25 </script> 26 </head> 27 <body> 28 <div id="tanContainer"> 29 <div id="tabNav"> 30 <ul> 31 <li onclick="tab(‘tab1‘)">标题一</li> 32 <li onclick="tab(‘tab2‘)">标题二</li> 33 <li onclick="tab(‘tab3‘)">标题三</li> 34 <li onclick="tab(‘tab4‘)">标题四</li> 35 </ul> 36 </div> 37 <div id="tab"> 38 <div id="tab1">内容一</div> 39 <div id="tab2">内容二</div> 40 <div id="tab3">内容三</div> 41 <div id="tab4">内容四</div> 42 </div> 43 </div> 44 </body> 45 </html>
方法二:先设置所有内容隐藏,然后点击标题对用的内容显示。代码如下:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <style> 6 *{ 7 padding: 0; 8 margin: 0; 9 } 10 li{ 11 list-style: none; 12 float:left; 13 } 14 #tabCon{ 15 clear: both; 16 } 17 #tabCon_1{ 18 display: none; 19 } 20 #tabCon_2{ 21 display: none; 22 } 23 #tabCon_3{ 24 display: none; 25 } 26 </style> 27 <script> 28 function changeTab(tabCon_num){ 29 for(i=0;i<=3;i++) { 30 document.getElementById("tabCon_"+i).style.display="none"; //将所有的层都隐藏 31 } 32 document.getElementById("tabCon_"+tabCon_num).style.display="block";//显示当前层 33 } 34 </script> 35 </head> 36 <body> 37 <div id="tanContainer"> 38 <div id="tab"> 39 <ul> 40 <li onclick="changeTab(‘0‘)">标题一</li> 41 <li onclick="changeTab(‘1‘)">标题二</li> 42 <li onclick="changeTab(‘2‘)">标题三</li> 43 <li onclick="changeTab(‘3‘)">标题四</li> 44 </ul> 45 </div> 46 <div id="tabCon"> 47 <div id="tabCon_0">内容一</div> 48 <div id="tabCon_1">内容二</div> 49 <div id="tabCon_2">内容三</div> 50 <div id="tabCon_3">内容四</div> 51 </div> 52 </div> 53 </body> 54 </html>
方法三:显示和隐藏通过是有拥有class控制,先把所有的内容隐藏dispaly设为none,而该class的display设置为block,遍历所有标题节点和内容节点,点击标题后,该标题节点和对用的内容节点拥有class,其他的没有。代码如下:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <style> 6 *{ 7 padding: 0; 8 margin: 0; 9 } 10 li{ 11 list-style: none; 12 float:left; 13 } 14 #tabCon { 15 clear: both; 16 } 17 #tabCon div { 18 display:none; 19 } 20 #tabCon div.fdiv { 21 display:block; 22 } 23 </style> 24 </head> 25 <body> 26 <div id="tanContainer"> 27 <div id="tab"> 28 <ul> 29 <li class="fli">标题一</li> 30 <li>标题二</li> 31 <li>标题三</li> 32 <li>标题四</li> 33 </ul> 34 </div> 35 <div id="tabCon"> 36 <div class="fdiv">内容一</div> 37 <div>内容二</div> 38 <div>内容三</div> 39 <div>内容四</div> 40 </div> 41 </div> 42 </body> 43 <script> 44 var tabs=document.getElementById("tab").getElementsByTagName("li"); 45 var divs=document.getElementById("tabCon").getElementsByTagName("div"); 46 47 for(var i=0;i<tabs.length;i++){ 48 tabs[i].onclick=function(){change(this);} 49 } 50 51 function change(obj){ 52 for(var i=0;i<tabs.length;i++){ 53 if(tabs[i]==obj){ 54 tabs[i].className="fli"; 55 divs[i].className="fdiv"; 56 }else{ 57 tabs[i].className=""; 58 divs[i].className=""; 59 } 60 } 61 } 62 </script> 63 </html>
该方法的缺点是,内容块的div下面不能再有div标签了。
时间: 2024-10-13 12:14:11