简单的选项卡DEMO
给初学JS的老哥写了一个很简单的选项卡DEMO,配上最通俗易懂的注释;这是DEMO /demo/tab.html
<!doctype html>
<html>
<head>
<title>简易选项卡DEMO</title>
<meta charset="UTF-8" />
<script type="text/javascript" src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
<style>
*{
margin:0px;
padding:0px;
}
.clearfix:after {
content:'\20';
display:block;
height:0;
clear:both;
}
.clearfix {
zoom:1;
}
.wrapper{
width:500px;
border:1px solid #dfdfdf;
}
.wrapper .tab-nav{
background: #efefef;
border-bottom: 1px solid #dfdfdf;
}
.wrapper .tab-nav-list{
display: block;
float:left;
height:30px;
width:160px;
line-height: 30px;
text-align: center;
cursor: pointer;
transition:.3s;
}
.wrapper .tab-nav-list:hover{
background: #dddddd;
}
.wrapper .tab-content{
display:none;
line-height: 30px;
padding-left: 30px;
}
.wrapper .tab-content.active{
display:block;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="tab-nav clearfix">
<ul class="tab-ul clearfix" id="tabNav">
<li class="tab-nav-list" data-tab="a">选项一</li>
<li class="tab-nav-list" data-tab="b">选项二</li>
<li class="tab-nav-list" data-tab="c">选项三</li>
</ul>
</div>
<div class="tab-wrapper" id="tabWrapper">
<ul class="tab-content active" data-tab="a">
<li>测试一测试一测试一测试一测试一测试一测试…</li>
<li>测试一测试一测试一测试一测试一测试一测试…</li>
<li>测试一测试一测试一测试一测试一测试一测试…</li>
<li>测试一测试一测试一测试一测试一测试一测试…</li>
<li>测试一测试一测试一测试一测试一测试一测试…</li>
<li>测试一测试一测试一测试一测试一测试一测试…</li>
</ul>
<ul class="tab-content" data-tab="b">
<li>测试二测试二测试二测试二测试二测试二测试…</li>
<li>测试二测试二测试二测试二测试二测试二测试…</li>
<li>测试二测试二测试二测试二测试二测试二测试…</li>
<li>测试二测试二测试二测试二测试二测试二测试…</li>
<li>测试二测试二测试二测试二测试二测试二测试…</li>
<li>测试二测试二测试二测试二测试二测试二测试…</li>
</ul>
<ul class="tab-content" data-tab="c">
<li>测试三测试三测试三测试三测试三测试三测试…</li>
<li>测试三测试三测试三测试三测试三测试三测试…</li>
<li>测试三测试三测试三测试三测试三测试三测试…</li>
<li>测试三测试三测试三测试三测试三测试三测试…</li>
<li>测试三测试三测试三测试三测试三测试三测试…</li>
<li>测试三测试三测试三测试三测试三测试三测试…</li>
</ul>
</div>
</div>
<script>
$('#tabNav').mouseover(changeView)
//$('#tabNav')为获取id="tabNav"的标签
//对id="tabNav"的节点绑定mouseover(鼠标浮动在标签上的时候)事件
//事实上 $('#tabNav').mouseover() 就是一个函数,函数的参数也是一个function: 即下面的changeView函数;mouseover()会传递一个event(事件对象),该event包括:具体在哪一个标签节点上,鼠标此时的位置等等
//顺便说一下,如果不想在鼠标浮动在标签上就切换,而是想在点击的时候才切换可以使用click方法:
//就像这样:$('#tabNav').click(changeView)
function changeView(event){
//该方法的参数是event,也就是鼠标浮动的当时状态的一个对象,包括:具体在哪一个标签节点上,鼠标此时的位置等等
var target = event.target,//获取鼠标此时正在具体哪一个标签上,对应的为<li class="tab-nav-list" data-tab="a">选项一</li> ,或 <li class="tab-nav-list" data-tab="b">选项二</li> , 或 <li class="tab-nav-list" data-tab="c">选项三</li>
curTab = $(target).attr('data-tab');//获取该标签的data-tab属性,这并不是一个标签的常用属性,而是用来标记该标签的自定义属性
if(curTab){//如果此时鼠标浮动的标签有data-tab属性的话就执行下面的语句
var tabs = $('#tabWrapper .tab-content'),//获取所有的选项卡,类似于CSS中的#tabWrapper .tab-content ,这是一个数组
$tab;
for(var i=0;i<tabs.length;i++){
//用一个for循环来获取所有的选项卡,一一做处理
//处理的原理很简单:如果当前选项的data-tab属性等于刚刚获取到的选项卡data-tab属性的话,就给他加一个active类;如果不等于的话就把它的active类去掉
//在最上面的CSS声明中有一个类.class{display:none}
//这样就可以做到:对鼠标选中的类加上active属性,对鼠标没有选中的类删除active从而做到了想要隐藏的就隐藏,想要展现的就展现的目的
if($(tabs[i]).attr('data-tab') == curTab){
//$(tabs[i])就是for循环中单一循环体,用来判断它的data-tab属性是否等于刚刚鼠标浮动在tab上的data-tab属性
$(tabs[i]).addClass('active')
}else{
$(tabs[i]).removeClass('active')
}
}
}
}
</script>
</body>
</html>