最簡單純JavaScript實(shí)現(xiàn)Tab標(biāo)簽頁切換的方式(推薦)
先說一下最土的一種方法:
Html:
<div class="tab-head"> <h2 id="tab1" onmouseover="changeTab1()" class="selected">1</h2> <h2 id="tab2" onmouseover="changeTab2()">2</h2> <h2 id="tab3" onmouseover="changeTab3()">3</h2> </div> <div class="tab-content"> <div id="c1" class="show">content1</div> <div id="c2">content2</div> <div id="c3">content3</div> </div>
CSS:
h2 {
border-top: solid cornflowerblue 1px;
border-left: solid cornflowerblue 1px;
width: 50px;
height: 25px;
margin: 0;
float: left;
text-align: center;
}
.tab-content {
border: solid cornflowerblue 1px;
width: 152px;
height: 100px;
}
.tab-content div{
display: none;
}
.selected {
background-color: cornflowerblue;
}
.tab-content .show{
display: block;
}
JS:
var tab1 = document.getElementById('tab1'),
tab2 = document.getElementById('tab2'),
tab3 = document.getElementById('tab3'),
c1 = document.getElementById('c1'),
c2 = document.getElementById('c2'),
c3 = document.getElementById('c3');
function changeTab1() {
tab1.className = 'selected';
tab2.className = '';
tab3.className = '';
c1.className = 'show'
c2.className = '';
c3.className = '';
}
function changeTab2() {
tab1.className = '';
tab2.className = 'selected';
tab3.className = '';
c1.className = '';
c2.className = 'show';
c3.className = '';
}
function changeTab3() {
tab1.className = '';
tab2.className = '';
tab3.className = 'selected';
c1.className = ''
c2.className = '';
c3.className = 'show';
}
效果:

實(shí)現(xiàn)Tab的切換,我們很容易想到的一種方式就是給每一個要控制的標(biāo)簽添加id,然后分別編寫鼠標(biāo)事件,使用id獲取每個元素,精確地控制每個元素的樣式。
這種方式的缺點(diǎn)顯而易見,有幾個元素就有幾個id,每個tab都要編寫function,里面的方法大同小異。要增加tab的話,還要增加id和function,代碼冗余,不易擴(kuò)展。
第二種較為高明些的方法是編寫一個function,將每個元素的序號傳進(jìn)去。
Html:
<div class="tab-head"> <h2 onmouseover="changeTab(0)" class="selected">1</h2> <h2 onmouseover="changeTab(1)">2</h2> <h2 onmouseover="changeTab(2)">3</h2> </div> <div class="tab-content"> <div class="show">content1</div> <div>content2</div> <div>content3</div> </div>
JS:
var tabs = document.getElementsByClassName('tab-head')[0].getElementsByTagName('h2'),
contents = document.getElementsByClassName('tab-content')[0].getElementsByTagName('div');
function changeTab(index) {
for(var i = 0, len = tabs.length; i < len; i++) {
if(i === index) {
tabs[i].className = 'selected';
contents[i].className = 'show';
}else{ tabs[i].className = '';
contents[i].className = ''; }
}
}
這樣就只要寫一個function了,而且不需要id,但是還是要按照順序傳遞參數(shù)。
第三種方式和第二種基本一樣,只是參數(shù)傳遞的是this指針。
Html:
<div class="tab-head"> <h2 onmouseover="changeTab(this)" class="selected">1</h2> <h2 onmouseover="changeTab(this)">2</h2> <h2 onmouseover="changeTab(this)">3</h2> </div> <div class="tab-content"> <div class="show">content1</div> <div>content2</div> <div>content3</div> </div>
JS:
var tabs = document.getElementsByClassName('tab-head')[0].getElementsByTagName('h2'),
contents = document.getElementsByClassName('tab-content')[0].getElementsByTagName('div');
function changeTab(tab) {
for(var i = 0, len = tabs.length; i < len; i++) {
if(tabs[i] === tab) {
tabs[i].className = 'selected';
contents[i].className = 'show';
} else {
tabs[i].className = '';
contents[i].className = '';
}
}
}
這種方式稍微方便一些,只要傳遞this指針,不用按照順序傳遞序號,但這也不是最簡便的方式。
最簡便的一種:
第四種方式:
Html:
<div class="tab-head"> <h2 class="selected">1</h2> <h2>2</h2> <h2>3</h2> </div> <div class="tab-content"> <div class="show">content1</div> <div>content2</div> <div>content3</div> </div>
JS:
var tabs = document.getElementsByClassName('tab-head')[0].getElementsByTagName('h2'),
contents = document.getElementsByClassName('tab-content')[0].getElementsByTagName('div');
(function changeTab(tab) {
for(var i = 0, len = tabs.length; i < len; i++) {
tabs[i].onmouseover = showTab;
}
})();
function showTab() {
for(var i = 0, len = tabs.length; i < len; i++) {
if(tabs[i] === this) {
tabs[i].className = 'selected';
contents[i].className = 'show';
} else {
tabs[i].className = '';
contents[i].className = '';
}
}
}
這樣JS、Html、CSS就完全分離了,通過this指針就可以判斷當(dāng)前鼠標(biāo)滑過的是哪一個tab了。
以上所述是小編給大家介紹的最簡單純JavaScript實(shí)現(xiàn)Tab標(biāo)簽頁切換的方式(推薦),希望對大家有所幫助,如果大家有任何疑問請留言,小編會及時回復(fù)大家的,在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- JavaScript實(shí)現(xiàn)Tab標(biāo)簽頁切換的最簡便方式(4種)
- vue.js實(shí)現(xiàn)標(biāo)簽頁切換效果
- AngularJS標(biāo)簽頁tab選項(xiàng)卡切換功能經(jīng)典實(shí)例詳解
- JS實(shí)現(xiàn)標(biāo)簽頁切換效果
- JS實(shí)現(xiàn)切換標(biāo)簽頁效果實(shí)例代碼
- 純css+js寫的一個簡單的tab標(biāo)簽頁帶樣式
- JS實(shí)現(xiàn)標(biāo)簽頁效果(配合css)
- AngularJS實(shí)現(xiàn)標(biāo)簽頁的兩種方式
- JavaScript實(shí)現(xiàn)標(biāo)簽頁切換效果
相關(guān)文章
flexible.js實(shí)現(xiàn)移動端rem適配方案
這篇文章主要介紹了flexible.js實(shí)現(xiàn)移動端rem適配方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
JavaScript遞歸函數(shù)解“漢諾塔”算法代碼解析
這篇文章主要介紹了JavaScript遞歸函數(shù)解“漢諾塔”算法代碼解析,需要的朋友可以參考下2018-07-07
js面向?qū)ο缶幊讨绾螌?shí)現(xiàn)方法重載
如何實(shí)現(xiàn)方法重載,涉及到三個問題:同名函數(shù)的調(diào)用、函數(shù)中特殊的參數(shù)arguments、如何利用arguments實(shí)現(xiàn)方法重載,需要的朋友可以參考下2014-07-07
JavaScript數(shù)組Array對象增加和刪除元素方法總結(jié)
這篇文章主要介紹了JavaScript數(shù)組Array對象增加和刪除元素方法,實(shí)例總結(jié)了pop方法、push方法、splice方法、concat方法等的使用技巧,需要的朋友可以參考下2015-01-01
javascript 文本框水印/占位符(watermark/placeholder)實(shí)現(xiàn)方法
html5為表單元素(type為text/password/search/url/telephone/email)新增了一個placeholder屬性,為輸入框提供一種提示2012-01-01
JavaScript call apply使用 JavaScript對象的方法綁定到DOM事件后this指向問題
JavaScript對象與DOM對象進(jìn)行綁定會遇到一個問題:如果被綁定的對象的方法中包含this關(guān)鍵字,當(dāng)事件被觸發(fā)時this指向的卻是DOM對象,而不是之前的JS對象。2011-09-09

