tab切换代码优化

上次的tab切换的代码里面有很多重复的代码,需要做做优化,把重复的代码用函数封装起来调用。

优化前:

 1 <script>
 2     //获取id封装成一个函数$()方便调用
 3 function $(id){
 4         //如果传入的参数类型为字符串则获取当前ID元素,否则返回id
 5             return typeof id==="string"?document.getElementById(id):id;
 6         }
 7         function tab(){
 8         //声明 索引index,两个变量来装定时器,一个轮播定时器,一个延时定时器
 9         var index=0,timer=null,timer2=null;
10         var titles=$(‘notice-tit‘).getElementsByTagName(‘li‘);
11         var divs=$(‘notice-con‘).getElementsByTagName(‘div‘);
12         for(var j=0;j<titles.length;j++){
13             //给每个li设置ID
14             titles[j].id=j;
15             //给每个li绑定悬浮事件
16             titles[j].onmouseover=function(){
17             //悬浮时首先清除延时定时器
18                 clearInterval(timer);
19             //清除轮播定时器
20                 clearTimeout(timer2);
21             //初始化两个定时器
22                 timer2=null;
23                 timer=null;
24             //this的一个引用,因为在setTimeout中this指向window对象
25                 var that=this;
26             //创建一个延时定时器
27                 timer2=setTimeout(function(){
28                     for(var i=0;i<titles.length;i++){
29                 titles[i].className="";
30                 divs[i].style.display="none";
31             }
32             titles[that.id].className="select";
33             divs[that.id].style.display="block";
34             //鼠标悬浮时改变index的值为当前的id
35             index=that.id;
36                 },500);
37             }
38             //给每个Li绑定鼠标离开时的事件
39             titles[j].onmouseout=function(){
40             //创建一个轮播定时器,离开时轮播能继续进行,因为上面设置了index=that
41             //所以鼠标离开后会自动播放下一个tab
42             timer=setInterval(function(){
43                 index++;
44             if(index>=titles.length){
45                 index=0;
46             }
47             for(var i=0;i<titles.length;i++){
48                 titles[i].className="";
49                 divs[i].style.display="none";
50             }
51             titles[index].className="select";
52             divs[index].style.display="block";
53             },2000);
54             }
55         }
56         //创建之前看是否存在轮播定时器,有就清除掉
57         if(timer){
58             clearInterval(timer);
59             timer=null;
60         }
61         //创建一个轮播定时器
62         timer=setInterval(function(){
63             index++;
64             if(index>=titles.length){
65                 index=0;
66             }
67             for(var i=0;i<titles.length;i++){
68                 titles[i].className="";
69                 divs[i].style.display="none";
70             }
71             titles[index].className="select";
72             divs[index].style.display="block";
73         },2000);
74 }
75 tab();
76 </script>

优化后:

 1     <script>
 2     //获取id封装成一个函数$()方便调用
 3         function $(id){
 4         //如果传入的参数类型为字符串则获取当前ID元素,否则返回id
 5             return typeof id==="string"?document.getElementById(id):id;
 6         }
 7         function tab(){
 8         //声明 索引index,两个变量来装定时器,一个轮播定时器,一个延时定时器
 9         var index=0,timer=null,timer2=null;
10         var titles=$(‘notice-tit‘).getElementsByTagName(‘li‘);
11         var divs=$(‘notice-con‘).getElementsByTagName(‘div‘);
12         for(var j=0;j<titles.length;j++){
13             //给每个li设置ID
14             titles[j].id=j;
15             //给每个li绑定悬浮事件
16             titles[j].onmouseover=function(){
17             //悬浮时首先清除延时定时器
18                 clearInterval(timer);
19             //清除轮播定时器
20                 clearTimeout(timer2);
21             //初始化两个定时器
22                 timer2=null;
23                 timer=null;
24             //this的一个引用,因为在setTimeout中this指向window对象
25                 var that=this;
26             //创建一个延时定时器
27                 timer2=setTimeout(function(){
28                 changeOption(that.id);
29             //鼠标悬浮时改变index的值为当前的id
30             index=that.id;
31                 },500);
32             }
33             //给每个Li绑定鼠标离开时的事件
34             titles[j].onmouseout=function(){
35             //创建一个轮播定时器,离开时轮播能继续进行,因为上面设置了index=that
36             //所以鼠标离开后会自动播放下一个tab
37             timer=setInterval(autoPlay,2000);
38             }
39         }
40         //创建之前看是否存在轮播定时器,有就清除掉
41         if(timer){
42             clearInterval(timer);
43             timer=null;
44         }
45         //创建一个轮播定时器
46         timer=setInterval(autoPlay,2000);
47 function autoPlay(){
48             index++;
49             if(index>=titles.length){
50                 index=0;
51             }
52             changeOption(index);
53 }
54 function changeOption(curindex){
55     for(var i=0;i<titles.length;i++){
56                 titles[i].className="";
57                 divs[i].style.display="none";
58             }
59             titles[curindex].className="select";
60             divs[curindex].style.display="block";
61 }
62 }
63
64 tab();

代码中三处重复的for循环清除 className display的属性,和下面给当前索引添加属性,所以需要把他们封装成函数,但是三处也不是全部一样,索引的值不同,可以给封装的函数changeOption()传入参数来解决.

然后发现自动轮播有两处是一样的,封装成函数autoPlay(),来调用它。

要记得,只要出现了重复都可以用函数来封装调用。

时间: 2024-08-10 00:07:09

tab切换代码优化的相关文章

原生javascript实现Tab切换

tab切换在各大主流页面有广泛的应用,今天来分享一个用原生javascript来实现类似京东购物边栏的TAB.对于正在使用web前端开发(http://www.maiziedu.com/course/web/)网站的朋友,是非常有用的哦. 首先以下是一段边栏HTML框架代码 <body> <div class="wrap"> <div id="left"> <ul id="leftList"> &l

tab切换

今天我们开始试着写一些js特效,先写一个简单的tab切换,在现实生活中,一些网站tab切换是必不可少的,来下面让我们一起写一下 1,思路: 当点击的时候实现切换并改变里面的内容jQuery实现 2,代码 html代码 1 <div class="wrapper"> 2 <ul class="tab"> 3 <li class="tab-item active">国际大牌<span>◆</spa

CSS3 :target伪类实现Tab切换效果

用:target伪类实现Tab切换效果真的非常简单!简单到什么程度呢?它只需要下面这些代码. style.css: .song-info { position: absolute; background: #fff; } #song-info:target, #song-lyricCN:target, #song-lyricEN:target { z-index: 1; } html代码: <div class="song-nav"> <ul class="

用angularjs做简单的tab切换

用angularjs做简单的tab切换: 页面部分 <div> <div id="tabs" ng-controller="TabsCtrl"> <ul> <li ng-repeat="tab in tabs" ng-class="{active:isActiveTab(tab.url)}" ng-click="onClickTab(tab)">{{tab.t

原生JS实现tab切换--web前端开发

tab切换非常常见,应用非常广泛,比较实用,一般来说是一个网站必不可少的一个效果.例如:https://123.sogou.com/中的一个tab部分: 1.案例源代码 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>tab切换</title> <style> *{margin: 0;paddin

bootstrap 标签页tab切换js(含报错原因)

booststrap 标签页的tab切换,相信大家已经都很熟悉了,在boot官网示例以及其他网站已经很多罗列相关代码的了,这里就不赘述了.这里主要贴下让boot标签页默认显示哪个标签页的js. 主要留作自己工作备忘. 1 $('a[data-toggle="tab"]') 2 $('#myTab a[href="#profile"]').tab('show') 3 $('#myTab a:first').tab('show') 4 $('#myTab a:last'

Android典型界面设计-访网易新闻实现双导航tab切换

一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客Android典型界面设计2(FragmentTabHost+Fragment实现底部tab切换)基础之上和Android典型界面设计1(ViewPage+Fragment实现区域顶部tab滑动切换)整合应用实现.查看两篇博客请点击:http://www.cnblogs.com/jerehedu/p

tab切换 jquery

核心代码: $('#top li').click(function(){   var index=$('#top li').index(this);   $('#top li:eq('+index+')').addClass('cur').siblings('li').removeClass('cur');   $('#content div:eq('+index+')').addClass('cur').siblings('div').removeClass('cur');  }); 1 <!

JavaScript跳转到指定页面并且到指定的tab切换窗口

案例的解析就是点击A页面的第一个的切换窗口的按钮跳转到B页面,再点击B页面的按钮跳转到A页面的第二个窗口,这个实现的效果有三种方法,下面的图片案例: A页面的第一个切换窗口 B页面的跳转按钮 A页面的第二个切换窗口 第一方法用函数function: 演示效果:JavaScript跳转到指定页面并且到指定的tab切换窗口 A页面按钮 <a href="b.html?id=1980&order_type=p_order">aaaaa</a> B页面按钮代码: