ホームページ > 記事 > ウェブフロントエンド > javascript_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> <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>
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> <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>
方法 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> <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> </ul> </div> <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>
方法 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 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=""; } } } </script> </html>
方法 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> <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>
上記は、皆さん向けのタブ切り替えの実装方法をまとめたものです。このアイデアに従って、独自のタブ切り替えエフェクトを作成してみてください。