ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptでタブ切り替えを実装する4つの方法

JavaScriptでタブ切り替えを実装する4つの方法

高洛峰
高洛峰オリジナル
2017-02-08 16:48:381199ブラウズ

この記事では主に JavaScript でタブ切り替えを実装する 4 つの方法を紹介し、それぞれの方法を評価します。興味のある方は参考にしてください。

タブ切り替えは Web ページで非常に一般的であるため、最近 4 つの実装方法をまとめました。
まず、タブ フレームを記述し、最も単純なスタイルを追加します。コードは次のとおりです:

<!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>

現在の表示効果は次のとおりです:

JavaScriptでタブ切り替えを実装する4つの方法

4 つのタブ タイトルと 4 つのコンテンツ領域がすべて表示されます。このページでは、タブ切り替え効果を実現する必要があります。つまり、タイトル 1 をクリックするとコンテンツ 1 が表示され、他のコンテンツは表示されません。タイトル 2 をクリックするとコンテンツ 2 が表示され、他のコンテンツは表示されません。
全体的なアイデアは非常にシンプルで、イベントを 4 つのタイトルにバインドすると、対応するコンテンツが表示され、他のコンテンツは非表示になります。

方法 1: クリックされたタイトルに対応するコンテンツが表示され、クリックされなかったタイトルに対応するコンテンツは非表示になります。 コードは次のとおりです:

 <!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(&#39;tab1&#39;)">标题一</li>
   <li onclick="tab(&#39;tab2&#39;)">标题二</li>
   <li onclick="tab(&#39;tab3&#39;)">标题三</li>
   <li onclick="tab(&#39;tab4&#39;)">标题四</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>

方法 2: まず、すべてのコンテンツを非表示に設定し、タイトルをクリックして関連するコンテンツを表示します。 コードは次のとおりです:

 <!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(&#39;0&#39;)">标题一</li>
   <li onclick="changeTab(&#39;1&#39;)">标题二</li>
   <li onclick="changeTab(&#39;2&#39;)">标题三</li>
   <li onclick="changeTab(&#39;3&#39;)">标题四</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>

方法 3: 表示と非表示はクラスによって制御されます。 まず、すべてのコンテンツを非表示にして表示を none に設定し、クラスの表示をブロックに設定します。 、すべてのタイトル ノードとコンテンツ ノードをトラバースします。タイトルをクリックすると、タイトル ノードと対応するコンテンツ ノードにはクラスがありますが、その他にはクラスがありません。 コードは次のとおりです:

 <!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>

このメソッドの欠点は、コンテンツ ブロックの p の下に p タグが存在できないことです。

方法 4: js を使用する代わりに、「input:checked」を使用してタブを切り替えます。まず、すべてのコンテンツを非表示にし、選択したコンテンツを表示します。 コードは次のとおりです:

 <!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>

この方法の欠点は、異なる領域間の切り替えがクリックによってのみ行えることです。

上記は、皆さん向けのタブ切り替えの実装方法をまとめたものです。このアイデアに従って、独自のタブ切り替えエフェクトを作成してみてください。

JavaScriptを使用したタブ切り替えの4つの方法に関するその他の関連記事については、PHP中国語Webサイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。