兰海传奇

当前位置:   网站首页 >> 站长

html css 原生js实现Tab(tab)选项卡切换三种效果

Tab(tab)选项卡3种切换效果分别是:自动切换、手动马上切换、手动延迟切换,3种效果的html和css部分都一样,原生js有不同。

一、html代码如下:

<div class="wrap">

<div class="container-top" id="list">

<ul>

<li><a href="">论坛</a></li>

<li><a href="">博客</a></li>

<li><a href="">交流</a></li>

<li><a href="">社区</a></li>

<li><a href="">反馈</a></li>

</ul>

</div>

<div class="container-bottom" id="item">

<div class="con">

<ul>

<li><a href="#">论坛A</a></li>

<li><a href="#">论坛B</a></li>

<li><a href="#">论坛C</a></li>

<li><a href="#">论坛D</a></li>

</ul>

</div>

<div class="con">

<ul>

<li><a href="#">博客A</a></li>

<li><a href="#">博客B</a></li>

<li><a href="#">博客C</a></li>

<li><a href="#">博客D</a></li>

</ul>

</div>

<div class="con">

<ul>

<li><a href="#">交流A</a></li>

<li><a href="#">交流B</a></li>

<li><a href="#">交流C</a></li>

<li><a href="#">交流D</a></li>

</ul>

</div>

<div class="con">

<ul>

<li><a href="#">社区A</a></li>

<li><a href="#">社区B</a></li>

<li><a href="#">社区C</a></li>

<li><a href="#">社区D</a></li>

</ul>

</div>

<div class="con">

<ul>

<li><a href="#">反馈A</a></li>

<li><a href="#">反馈B</a></li>

<li><a href="#">反馈C</a></li>

<li><a href="#">反馈D</a></li>

</ul>

</div>

</div>

</div>

二、css代码如下:

*{

margin:0;

padding:0;

text-decoration:none;

list-style:none;

}

a{

color:#fff;

font-size:13px;

display:block;

}

a:hover{

color:#ccc;

}

  .wrap{

margin:60px auto;

width:250px;

height:auto;

}

.container-top{

height:30px;

}

.container-bottom{

height:60px;

overflow:hidden;

}

.container-top ul{

height:30px;

}

.container-top ul li{

float:left;

width:50px;

height:30px;

line-height:30px;

text-align:center;

background-color:#ccc;

}

.container-bottom ul{

height:60px;

background-image:linear-gradient(to right,#FF00FF,#E066FF);

}

.container-bottom ul li{

width:125px;

height:30px;

line-height:30px;

float:left;

text-align:center;

background:none;

}

.select{

background-image:linear-gradient(to right,dimgray,gray);

}


三、原生js代码

1、自动切换原生js代码

function $(id){

return typeof id ==="string"?document.getElementById(id):document;

}

window.onload = function(){

//初始化计时器;

var timer = null;

//初始化索引;

var index = -1;

var items = $("list").getElementsByTagName("li");

var divs = $("item").getElementsByTagName("div");

function autoPlay(){

index++;

if(index > 4) index = 0;

for(var i = 0,len = items.length; i < len; i++){

items[i].className = "";

divs[i].style.display = "none";

}

items[index].className = "select";

divs[index].style.display = "block";

}

timer = setInterval(autoPlay,1000);

}


2、手动马上切换原生js代码如下:

//封装通过id来查找元素的函数,不需要引入jquery库;

function $(id){

return typeof id === "string"?document.getElementById(id):document;

}

window.onload = function(){

//获取5个标题名;

var items = $("list").getElementsByTagName("li");

//获取5个内容盒子;

vardivs = $("item").getElementsByTagName("div");

if(items.length != divs.length){

return;

}

//循环遍历标题名和内容盒子;

for(var i = 0,len = items.length; i < len; i++){

items[i].id = i;

items[i].onmouseover = function(){

for(var j = 0,len = items.length; j < len; j++){

items[j].className = "";

divs[j].style.display = "none";

}

this.className = "select";

divs[this.id].style.display = "block";

}

}

}

3、手动延迟切换原生js代码如下:

function $(id){

return typeof id === "string"?document.getElementById(id):document;

}

window.onload = function(){

//初始化定时器;

var timer = null;

//通过id获取元素:获取五个标题;

var items = $("list").getElementsByTagName("li");

//通过id获取元素:获取五个盒子的内容;

var divs = $("item").getElementsByTagName("div");

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

//循环遍历标题名和内容盒子;

for(var i = 0,len = items.length; i < len; i++){

items[i].id = i;

items[i].onmouseover = function(){

var it = this;//【表示当前划过的li,和下面延迟计时器window对象进行区别】


//如果存在准备执行的计时器,立即清除,解决li划过的延迟bug;

if(timer){

clearTimeout(timer);

timer = null;

}

//设置延迟定时器:(因为setTimeout是window对象,下面的this指的是window.所以要修改)

timer = window.setTimeout(function(){

//再次引入for循环,去除多余的高亮选区,并且让多余出现的盒子状态为隐藏;

for(var j = 0,len = items.length; j < len; j++){

items[j].className = "";

divs[j].style.display = "none";

}

//让当前的元素为高亮显示;

it.className = "select";

//让所对应盒子内容显示出来;

divs[it.id].style.display = "block";

},500);

}

}

}

备注:

1、自己写的函数,尽量做到把其封装起来,让其能够复用

2、如要实现点击切换,把" mouseover " 改为 " onclick "即可

3、涉及到循环遍历数组的时候,为了避免进入死循环,尽量使用以下方式:

for(var i = 0,len = items.length; i < len; i++){ 

代码块;

}

而不是这样:

for(var i = 0; i < items.length; i++){ 

代码块;

}


发表我的评论

Hi,您需要填写昵称和邮箱!

  • 必填项
  • 必填项