js 选项卡实现

一、效果图如下


鼠标移动到第几个标签,跟随显示第几个标签页

<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>鼠标滑过选项卡效果</title>
<!--
<link type="text/css" rel="stylesheet" href="#">
-->
<style>
*{margin:0;padding:0;list-style:none;font-size:12px;}
.notice{
width:298px;
height:98px;
margin:10px;
border:1px solid #eee;
overflow:hidden;
}
.notice-tit{
height:27px;
position:relative;
background-color:#F7F7F7;
}
.notice-tit ul{
position:absolute;
width:301px;
left:-1px;
}
.notice-tit li{
float:left;
width:58px;
height:26px;
line-height:26px;
text-align:center;
overflow:hidden;
background:#FFF;
padding:0 1px;
background-color:#F7F7F7;
border-bottom:1px solid #eee;
}
.notice-tit li.select{
background:#FFF;
border-bottom-color:#fff;
border-left:1px solid #eee;
border-right:1px solid #eee;
padding:0;
font-weight:bolder;
}
.notice li a:link,.notice li a:visited{
text-decoration:none;
color:#000;
}
.notice li a:hover{
color:#f90;
}
.notice-con .mod{
margin:10px 10px 10px 19px;
}
.notice-con .mod ul li{float:left;width:134px;height:25px;overflow:hidden;}
</style>
<script type="text/javascript">
function $(id){
return typeof id==='string'?document.getElementById(id):id;
}
window.οnlοad=function(){
//获取鼠标滑过或点击的标签和要切换内容的元素
var titles=$('notice-tit').getElementsByTagName('li'),
divs=$('notice-con').getElementsByTagName('div');
if(titles.length!=divs.length) return;
//遍历titles下的所有li
for(var i=0,l=titles.length;i<l;i++){
titles[i].id=i;
titles[i].οnmοuseοver=function(){
//清楚li上的class
for(var j=0;j<l;j++){
titles[j].className="";
divs[j].style.display="none";
}
//设置当前为高亮显示
this.className='select';
divs[this.id].style.display="block";
}
}
}
</script>
</head>
<body>
<div id="notice" class="notice">
<div id="notice-tit" class="notice-tit">
<ul>
<li><a href="#">页一</a></li>
<li><a href="#">页二</a></li>
<li><a href="#">页三</a></li>
<li><a href="#">页四</a></li>
<li class="select"><a href="#">页五</a></li>
</ul>
</div>
<div id="notice-con" class="notice-con">
<div class="mod" style="display:none;">
<ul>
<li><a href="#">标签页1-1</a></li>
<li><a href="#">标签页1-2</a></li>
<li><a href="#">标签页1-3</a></li>
<li><a href="#">标签页1-4</a></li>
</ul>
</div>
<div class="mod" style="display:none;">
<ul>
<li><a href="#">标签页2-1</a></li>
<li><a href="#">标签页2-2</a></li>
<li><a href="#">标签页2-3</a></li>
<li><a href="#">标签页2-4</a></li>
</ul>
</div>
<div class="mod" style="display:none;">
<ul>
<li><a href="#">标签页3-1</a></li>
<li><a href="#">标签页3-2</a></li>
<li><a href="#">标签页3-3</a></li>
<li><a href="#">标签页3-4</a></li>
</ul>
</div>
<div class="mod" style="display:none;">
<ul>
<li><a href="#">标签页4-1</a></li>
<li><a href="#">标签页4-2</a></li>
<li><a href="#">标签页4-3</a></li>
<li><a href="#">标签页4-4</a></li>
</ul>
</div>
<div class="mod">
<ul>
<li><a href="#">标签页5-1</a></li>
<li><a href="#">标签页5-2</a></li>
<li><a href="#">标签页5-3</a></li>
<li><a href="#">标签页5-4</a></li>
</ul>
</div>
</div>
</div>
</body>
</html>

二、带 延时 切换标签页

修改上述代码的<script>...</script>标签内的内容为

<script type="text/javascript">
function $(id){
return typeof id==='string'?document.getElementById(id):id;
}
window.οnlοad=function(){
//标签的索引
var index=0;
var timer=null;


var lis=$('notice-tit').getElementsByTagName('li'),
divs=$('notice-con').getElementsByTagName('div');

if(lis.length!=divs.length) return;


//遍历所有的页签
for(var i=0;i<lis.length;i++){
lis[i].id=i;
lis[i].οnmοuseοver=function(){
//用that变量引用当前滑过的li
var that=this;
//如果存在准备执行的定时器,立刻清除,只有当前停留时间大于500ms才开始执行
if(timer){
clearTimeout(timer);
timer=null;
}
//延迟半秒执行
timer=setTimeout(function(){
for(var j=0;j<lis.length;j++){
lis[j].className="";
divs[j].style.display="none";
}
lis[that.id].className='select';
divs[that.id].style.display='block';
},500);
}
}

}
</script>

三、自动切换标签页

<script type="text/javascript">
function $(id){
return typeof id==='string'?document.getElementById(id):id;
}
window.οnlοad=tab;
function tab(){
//当前高亮显示的页签的索引
var index=0;
var timer=null;


//获取所有的页签和要切换的内容
var lis=$('notice-tit').getElementsByTagName('li'),
divs=$('notice-con').getElementsByTagName('div');
//遍历每一个页签且给他们绑定事件
for(var i=0;i<lis.length;i++){
lis[i].id=i;
lis[i].οnmοuseοver=function(){
clearInterval(timer);
changeOption(this.id);
}
lis[i].οnmοuseοut=function(){
timer=setInterval(autoPlay,2000);
}
}
if(timer){
clearInterval(timer);
timer=null;
}
//添加定时器,改变当前高亮的索引
timer=setInterval(autoPlay,2000);
function autoPlay(){
index++;
if(index>=lis.length){
index=0;
}
changeOption(index);
}
function changeOption(curIndex){
for(var j=0;j<lis.length;j++){
lis[j].className='';
divs[j].style.display='none';
}
//高亮显示当前页签
lis[curIndex].className='select';
divs[curIndex].style.display='block';
index=curIndex;
}
}
</script>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值