简单选项卡切换(二)

通过设置定时器实现延时0.5s切换,一个重要的技巧是定义了一个that变量来存放当前指针this,

之所以不能在这直接引用this是因为setTimeout是window对象,用this的话会指向定时器,所以要在前面定义一个变量
还要注意调用定时器前要判断是否存在准备执行的定时器。

效果如图:

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title>延时切换</title>
 6     <style type="text/css">
 7         *{margin: 0;padding: 0;font: normal 12px "微软雅黑";color: #000000;}
 8         ul{list-style-type: none;}
 9         a{text-decoration: none;}
10         #tab-list{width: 275px;height: 190px;margin: 20px auto;}
11         #ul1{border-bottom: 2px solid #8B4513;height: 32px;}
12         #ul1 li{display: inline-block;width: 60px;line-height: 30px;text-align: center;
13             border: 1px solid #999;border-bottom: none;margin-left: 5px;}
14         #ul1 li:hover{cursor: pointer;}
15         #ul1 li.active{border-top: 2px solid #8B4513;border-bottom: solid 2px #ffffff;}
16         #tab-list div{border: 1px solid #7396B8;border-top: none;}
17         #tab-list div li{height: 30px;line-height: 30px;text-indent: 8px;}
18         .show{display: block;}.hide{display: none;}
19     </style>
20     <script type="text/javascript">
21         window.onload=function(){
22             var ul1=document.getElementById('ul1');
23             var aLi=ul1.getElementsByTagName('li');
24             var oDiv=document.getElementById('tab-list');
25             var aDiv=oDiv.getElementsByTagName('div');
26             var timer=null;
27             for(var i=0;i<=aLi.length;i++){
28                 aLi[i].id=i;
29                 aLi[i].onmouseover=function(){
30                     var that=this;//用that这个变量来引用当前滑过的li
31                     //如果存在准备执行的定时器,立即清除,只能当前停留时间大于500ms时才开始执行(指鼠标快速滑过一个的那一瞬间要清除掉产生的定时器)
32                     if(timer){
33                         clearTimeout(timer);
34                         timer=null;
35                     }
36                     //延时半秒执行
37                     timer=window.setTimeout(function(){
38                         for(var i=0;i<aLi.length;i++){
39                             aLi[i].className="";
40                             aDiv[i].className="hide";
41                         }
42                         that.className="active";//之所以不能在这直接引用this是因为setTimeout是window对象,用this的话会指向定时器,所以要在前面定义一个变量
43                         aDiv[that.id].className="show";
44                     },500);
45                 }
46             }
47         }
48     </script>
49 </head>
50 <body>
51 <div id="tab-list">
52     <ul id="ul1">
53         <li class="active">房产</li><li>家居</li><li>二手房</li>
54     </ul>
55     <div>
56         <ul>
57             <li><a href="javascript:;">275万购昌平邻铁三居 总价20万买一居</a></li>
58             <li><a href="javascript:;">200万内购五环三居 140万安家东三环</a></li>
59             <li><a href="javascript:;">北京首现零首付楼盘 53万购东5环50平</a></li>
60             <li><a href="javascript:;">京楼盘直降5000 中信府 公园楼王现房</a></li>
61         </ul>
62     </div>
63     <div class="hide">
64         <ul>
65             <li><a href="javascript:;">40平出租屋大改造 美少女的混搭小窝</a></li>
66             <li><a href="javascript:;">经典清新简欧爱家 90平老房焕发新生</a></li>
67             <li><a href="javascript:;">新中式的酷色温情 66平撞色活泼家居</a></li>
68             <li><a href="javascript:;">瓷砖就像选好老婆 卫生间烟道的设计</a></li>
69         </ul>
70     </div>
71     <div class="hide">
72         <ul>
73             <li><a href="javascript:;">通州豪华3居260万 二环稀缺2居250w甩</a></li>
74             <li><a href="javascript:;">西3环通透2居290万 130万2居限量抢购</a></li>
75             <li><a href="javascript:;">黄城根小学学区仅260万 121平70万抛!</a></li>
76             <li><a href="javascript:;">独家别墅280万 苏州桥2居优惠价248万</a></li>
77         </ul>
78     </div>
79 </div>
80 </body>
81 </html>
原文地址:https://www.cnblogs.com/Lovebugs/p/6371089.html