今天學(xué)習(xí)的JS中,要實(shí)現(xiàn)tab欄切換效果谓谦,運(yùn)用了排他思想统扳。
圖片.png
用戶點(diǎn)擊button時(shí)捂蕴,不但button的背景顏色會(huì)改變,而且下面的內(nèi)容也會(huì)隨之改變闪幽。
圖片.png
首先要實(shí)現(xiàn)button的改變啥辨,用for循環(huán)遍歷每個(gè)button,對(duì)所有的button進(jìn)行初始化盯腌,使其類名為空溉知;然后跳出循環(huán),對(duì)當(dāng)前被點(diǎn)擊的button賦予一個(gè)類腕够。
圖片.png
而對(duì)于下面每個(gè)盒子隨著button的不同而改變级乍,首先得先得到每個(gè)button的序號(hào),對(duì)每個(gè)進(jìn)行匹配帚湘,使之互相對(duì)應(yīng)玫荣。
圖片.png
tab欄封裝
多個(gè)tab欄切換時(shí)需要用大盒子的id區(qū)分來封裝函數(shù),代碼如下:
html
<div class="box" id="one">
<div class="mt">
<span class="current">新聞</span>
<span>體育</span>
<span>娛樂</span>
<span>八卦</span>
</div>
<div class="mb">
<ul>
<li class="show">新聞模塊</li>
<li>體育模塊</li>
<li>娛樂模塊</li>
<li>八卦模塊</li>
</ul>
</div>
</div>
<div class="box" id="two">
<div class="mt">
<span class="current">新聞</span>
<span>體育</span>
<span>娛樂</span>
<span>八卦</span>
</div>
<div class="mb">
<ul>
<li class="show">新聞模塊</li>
<li>體育模塊</li>
<li>娛樂模塊</li>
<li>八卦模塊</li>
</ul>
</div>
</div>
<div class="box" id="three">
<div class="mt">
<span class="current">新聞</span>
<span>體育</span>
<span>娛樂</span>
<span>八卦</span>
</div>
<div class="mb">
<ul>
<li class="show">新聞模塊</li>
<li>體育模塊</li>
<li>娛樂模塊</li>
<li>八卦模塊</li>
</ul>
</div>
</div>
css
* {
margin: 0;
padding: 0;
}
ul {
list-style: none;
}
.box {
width: 350px;
height: 300px;
border: 1px solid #ccc;
margin: 100px auto;
overflow: hidden;
}
.mt span {
display: inline-block;
width: 80px;
height: 30px;
text-align: center;
line-height: 30px;
cursor: pointer;
background-color: pink;
}
.mt .current {
background-color: purple;
}
.mb li {
width: 100%;
height: 270px;
background-color: purple;
display: none;
}
.mb .show {
display: block;
}
js
window.onload = function() {
//想多個(gè)盒子互不影響 可以通過用id來區(qū)分開
//封裝tab欄切換函數(shù)——id函數(shù)
function tab(obj) {
var target = document.getElementById(obj);
var spans = target.getElementsByTagName('span');
var lis = target.getElementsByTagName('li');
for (var i = 0;i < spans.length;i++) {
//記錄索引號(hào)
spans[i].index = i;
spans[i].onmouseover = function() {
for (var j = 0;j < spans.length;j++) {
spans[j].className = '';
lis[j].className = '';
}
this.className = 'current';
lis[this.index].className = 'show';
}
}
}
//三個(gè)盒子都用到大诸,所以要調(diào)用三次,把他們的id調(diào)用進(jìn)去
tab('one');
tab('two');
tab('three');
}
效果圖
image.png