最簡(jiǎn)單純JavaScript實(shí)現(xiàn)Tab標(biāo)簽頁(yè)切換的方式(推薦)
先說(shuō)一下最土的一種方法:
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的切換,我們很容易想到的一種方式就是給每一個(gè)要控制的標(biāo)簽添加id,然后分別編寫鼠標(biāo)事件,使用id獲取每個(gè)元素,精確地控制每個(gè)元素的樣式。
這種方式的缺點(diǎn)顯而易見(jiàn),有幾個(gè)元素就有幾個(gè)id,每個(gè)tab都要編寫function,里面的方法大同小異。要增加tab的話,還要增加id和function,代碼冗余,不易擴(kuò)展。
第二種較為高明些的方法是編寫一個(gè)function,將每個(gè)元素的序號(hào)傳進(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 = ''; }
}
}
這樣就只要寫一個(gè)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指針,不用按照順序傳遞序號(hào),但這也不是最簡(jiǎn)便的方式。
最簡(jiǎn)便的一種:
第四種方式:
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就完全分離了,通過(guò)this指針就可以判斷當(dāng)前鼠標(biāo)滑過(guò)的是哪一個(gè)tab了。
以上所述是小編給大家介紹的最簡(jiǎn)單純JavaScript實(shí)現(xiàn)Tab標(biāo)簽頁(yè)切換的方式(推薦),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)留言,小編會(huì)及時(shí)回復(fù)大家的,在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- JavaScript實(shí)現(xiàn)Tab標(biāo)簽頁(yè)切換的最簡(jiǎn)便方式(4種)
- vue.js實(shí)現(xiàn)標(biāo)簽頁(yè)切換效果
- AngularJS標(biāo)簽頁(yè)tab選項(xiàng)卡切換功能經(jīng)典實(shí)例詳解
- JS實(shí)現(xiàn)標(biāo)簽頁(yè)切換效果
- JS實(shí)現(xiàn)切換標(biāo)簽頁(yè)效果實(shí)例代碼
- 純css+js寫的一個(gè)簡(jiǎn)單的tab標(biāo)簽頁(yè)帶樣式
- JS實(shí)現(xiàn)標(biāo)簽頁(yè)效果(配合css)
- AngularJS實(shí)現(xiàn)標(biāo)簽頁(yè)的兩種方式
- JavaScript實(shí)現(xiàn)標(biāo)簽頁(yè)切換效果
相關(guān)文章
詳解JavaScript正則表達(dá)式之RegExp對(duì)象
這篇文章主要介紹了JavaScript正則表達(dá)式之RegExp對(duì)象,對(duì)RegExp對(duì)象的基本使用方法,以及各種方法進(jìn)行整理,感興趣的小伙伴們可以參考一下2015-12-12
解決JS內(nèi)存泄露之js對(duì)象和dom對(duì)象互相引用問(wèn)題
這篇文章主要介紹了解決JS內(nèi)存泄露之js對(duì)象和dom對(duì)象互相引用問(wèn)題,需要的朋友可以參考下2017-06-06
JS獲取表格內(nèi)指定單元格html內(nèi)容的方法
這篇文章主要介紹了JS獲取表格內(nèi)指定單元格html內(nèi)容的方法,涉及javascript中innerHTML屬性的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
javascript實(shí)現(xiàn)C語(yǔ)言經(jīng)典程序題
這篇文章主要介紹了javascript實(shí)現(xiàn)C語(yǔ)言經(jīng)典程序題的解題思路,感興趣的小伙伴們可以參考一下2015-11-11
一些常用的JS功能函數(shù)(2009-06-04更新)
將 ClientMentInfo類改成了兼容IE6,IE7,IE8,Vista,Windows 7和Firefox2009-06-06

