在网页开发中,常常会遇见很多Tab切换,Tab切换增加网页浏览的舒适性,对于开发人员特别常见,本文使用JS实现tab切换效果,仅对学习中遇到的知识点做一个总结。
效果图如下:
实现思路:
1.首先使用HTML和CSS构建静态网页如上,标题使用ul-li标签,有浮动,主体使用四个大小一样的盒子,不添加JS时候,盒子竖直排列(很丑很丑)
2.添加JS代码
2.1 首先实现标题的Tab效果
2.1.1获取所有的li元素,注册鼠标进入事件,在鼠标进入事件中,清除所有的li元素样式,然后给当前li元素添加样式
2.1.2在注册事件前,给所有的li元素通过setAttribute()方法给li挨个添加index属性,记录标签的序号,方便和主体div对应
2.2 实现所有的主体模块Tab效果
2.2.1 获取所有的主体DIV,与标签进行绑定,通过getAttribute()方法获得当前标签的索引,通过该索引得到DIV集合中与标签对应的div
代码如下:
1 <!DOCTYPE html>
2 <html>
3 <head lang="en">
4 <meta charset="UTF-8">
5 <title></title>
6 <style>
7 *{
8 padding: 0px;
9 margin: 0px;
10 }
11 /* 总体大盒子 */
12 #box{
13 width: 400px;
14 height: 300px;
15 border: 1px solid gray;
16 margin: 100px auto auto;
17 }
18 /* 大盒子中头部小盒子ul */
19 #hd{
20 height: 45px;
21 }
22 /* 小盒子ul中li标签 */
23 #hd li{
24 height: 45px;
25 display: inline-block;
26 line-height: 45px;
27 width: 98px;
28 text-align: center;
29 border: 1px solid gray;
30 float: left;
31 list-style: none;
32 }
33 /* 大盒子中主体小盒子 */
34 #bd{
35 height: 255px;
36 }
37 /* 各个小版块 */
38 #bd div{
39 height: 100%;
40 display: none;
41
42 }
43
44 #bd,#hd .current{
45 display: block;
46 background-color: #ECEEF1;
47 }
48 </style>
49
50 </head>
51 <body>
52 <div id="box">
53 <ul id="hd">
54 <li class="current">体育</li>
55 <li>娱乐</li>
56 <li>新闻</li>
57 <li>综合</li>
58 </ul>
59
60 <div id="bd">
61 <div class="current" style="display: block;">这是体育频道</div>
62 <div>这是娱乐频道</div>
63 <div>这是新闻频道</div>
64 <div>这是综合频道</div>
65 </div>
66 </div>
67 <!-- 插入JS代码 -->
68 <script>
69 // 思路:
70 // 1.实现标题小模块的Tab切换
71 // 1.1 首先给所有的标题小模块清除样式
72 // 1.2 给鼠标移入的标题小模块添加样式
73 // 2.实现主体模块和标题小模块之间的绑定
74 // 2.1 给标题小模块添加一个属性index,用以记录标题小模块的索引
75 // 2.2 通过getAttribute()方法得到索引,从而对应主体模块的内容
76 var hd=document.getElementById('hd');
77 //获得所有的标题小模块
78 var lis=hd.getElementsByTagName('li');
79 //获得所有的主体模块
80 var bd=document.getElementById('bd');
81 var divs=bd.getElementsByTagName('div');
82 //给所有的li注册事件
83 for(var i=0;i<lis.length;i++){
84 var li=lis[i];
85 li.setAttribute('index',i);
86 li.οnmοuseοver=function(){
87 //每次鼠标移入的时候,清除所有的小模块样式,只给当前的小模块加入样式
88 for(var i=0;i<lis.length;i++){
89 lis[i].className="";//所有模块样式清除
90 this.className="current";
91 //鼠标移入的时候,给所有的主体模块清除样式,然后给对应当前小模块的主体模块添加样式
92 divs[i].className="";
93 divs[i].style.display="none";
94
95 //对当前的模块的进行操作
96 var index=parseInt(this.getAttribute('index'));
97 divs[index].className="current";
98 divs[index].style.display="block";
99 }
100 }
101 }
102 </script>
103 </body>
104 </html>