今天学习的JS中,要实现tab栏切换效果,运用了排他思想。
图片.png
用户点击button时,不但button的背景颜色会改变,而且下面的内容也会随之改变。
图片.png
首先要实现button的改变,用for循环遍历每个button,对所有的button进行初始化,使其类名为空;然后跳出循环,对当前被点击的button赋予一个类。
图片.png
而对于下面每个盒子随着button的不同而改变,首先得先得到每个button的序号,对每个进行匹配,使之互相对应。
图片.png
tab栏封装
多个tab栏切换时需要用大盒子的id区分来封装函数,代码如下:
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() {
//想多个盒子互不影响 可以通过用id来区分开
//封装tab栏切换函数——id函数
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++) {
//记录索引号
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';
}
}
}
//三个盒子都用到,所以要调用三次,把他们的id调用进去
tab('one');
tab('two');
tab('three');
}
网友评论