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

优化前:

 <script>
//获取id封装成一个函数$()方便调用
function $(id){
//如果传入的参数类型为字符串则获取当前ID元素,否则返回id
return typeof id==="string"?document.getElementById(id):id;
}
function tab(){
//声明 索引index,两个变量来装定时器,一个轮播定时器,一个延时定时器
var index=0,timer=null,timer2=null;
var titles=$('notice-tit').getElementsByTagName('li');
var divs=$('notice-con').getElementsByTagName('div');
for(var j=0;j<titles.length;j++){
//给每个li设置ID
titles[j].id=j;
//给每个li绑定悬浮事件
titles[j].onmouseover=function(){
//悬浮时首先清除延时定时器
clearInterval(timer);
//清除轮播定时器
clearTimeout(timer2);
//初始化两个定时器
timer2=null;
timer=null;
//this的一个引用,因为在setTimeout中this指向window对象
var that=this;
//创建一个延时定时器
timer2=setTimeout(function(){
for(var i=0;i<titles.length;i++){
titles[i].className="";
divs[i].style.display="none";
}
titles[that.id].className="select";
divs[that.id].style.display="block";
//鼠标悬浮时改变index的值为当前的id
index=that.id;
},500);
}
//给每个Li绑定鼠标离开时的事件
titles[j].onmouseout=function(){
//创建一个轮播定时器,离开时轮播能继续进行,因为上面设置了index=that
//所以鼠标离开后会自动播放下一个tab
timer=setInterval(function(){
index++;
if(index>=titles.length){
index=0;
}
for(var i=0;i<titles.length;i++){
titles[i].className="";
divs[i].style.display="none";
}
titles[index].className="select";
divs[index].style.display="block";
},2000);
}
}
//创建之前看是否存在轮播定时器,有就清除掉
if(timer){
clearInterval(timer);
timer=null;
}
//创建一个轮播定时器
timer=setInterval(function(){
index++;
if(index>=titles.length){
index=0;
}
for(var i=0;i<titles.length;i++){
titles[i].className="";
divs[i].style.display="none";
}
titles[index].className="select";
divs[index].style.display="block";
},2000);
}
tab();
</script>

优化后:

     <script>
//获取id封装成一个函数$()方便调用
function $(id){
//如果传入的参数类型为字符串则获取当前ID元素,否则返回id
return typeof id==="string"?document.getElementById(id):id;
}
function tab(){
//声明 索引index,两个变量来装定时器,一个轮播定时器,一个延时定时器
var index=0,timer=null,timer2=null;
var titles=$('notice-tit').getElementsByTagName('li');
var divs=$('notice-con').getElementsByTagName('div');
for(var j=0;j<titles.length;j++){
//给每个li设置ID
titles[j].id=j;
//给每个li绑定悬浮事件
titles[j].onmouseover=function(){
//悬浮时首先清除延时定时器
clearInterval(timer);
//清除轮播定时器
clearTimeout(timer2);
//初始化两个定时器
timer2=null;
timer=null;
//this的一个引用,因为在setTimeout中this指向window对象
var that=this;
//创建一个延时定时器
timer2=setTimeout(function(){
changeOption(that.id);
//鼠标悬浮时改变index的值为当前的id
index=that.id;
},500);
}
//给每个Li绑定鼠标离开时的事件
titles[j].onmouseout=function(){
//创建一个轮播定时器,离开时轮播能继续进行,因为上面设置了index=that
//所以鼠标离开后会自动播放下一个tab
timer=setInterval(autoPlay,2000);
}
}
//创建之前看是否存在轮播定时器,有就清除掉
if(timer){
clearInterval(timer);
timer=null;
}
//创建一个轮播定时器
timer=setInterval(autoPlay,2000);
function autoPlay(){
index++;
if(index>=titles.length){
index=0;
}
changeOption(index);
}
function changeOption(curindex){
for(var i=0;i<titles.length;i++){
titles[i].className="";
divs[i].style.display="none";
}
titles[curindex].className="select";
divs[curindex].style.display="block";
}
} tab();

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

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

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

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

  1. 谈谈一些有趣的CSS题目(八)-- 纯CSS的导航栏Tab切换方案

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  2. jQuery的DOM操作实例(1)——选项卡&&Tab切换

    一.原生JavaScript编写tab切换 二.jQuery编写tab切换 在用jQuery编写选项卡过程中,重要的事搞清楚 .eq() 和 .index() 的使用方法. .eq()是jQuery遍 ...

  3. jquery+bootstrap实现tab切换, 每次切换时都请求数据, 点击提交分别向不同的地址提交数据

    今天一个朋友叫帮做一个tab切换, 每一个tab内容区域都是从后台取出的数据, 这些数据要用表格的形式显示处理, 并且表格的内容区域可以修改, 如下所示: 例子查看请演示查看. 截图如图所示: 实现步 ...

  4. 基于zepto的H5/移动端tab切换触摸拖动加载更多数据

    以前实现移动端的滑动加载更多实现的方法是当滚动条快到页面底部时就自动加载更多的数据,在这方面很多人都用的是"西门的后花园"写的一个叫dropload的插件,这个插件用起来也很好,很 ...

  5. JavaScript的Tab切换

    在网页设计中经常要用到tab切换,遂整理了一下常用的两种方法. 先看一下示例代码: HTML: <!doctype html> <html lang="en"&g ...

  6. jquery实现tab切换完整代码

    代码如下,保存到html文件打开: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...

  7. js用户管理中心tab切换界面模板

    效果体验:http://hovertree.com/texiao/js/27/ 效果图如下: 代码如下: <!DOCTYPE html> <html> <head> ...

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

    用:target伪类实现Tab切换效果真的非常简单!简单到什么程度呢?它只需要下面这些代码. style.css: .song-info { position: absolute; backgroun ...

  9. ALT+TAB切换时小图标的添加 界面透明 屏幕大小 竖行字体 进程信息

    一,ALT+TAB切换时小图标的添加 Dlg类中添加变量 protected: HICON m_hIcon; #define IDR_MAINFRAME 128 ICON IDR_MAINFRAME, ...

随机推荐

  1. (原创)AP6212移植到AM335X自主开发板上

    转载请指明出处. 参考<关于AM335X移植SDIO WIFI的简易教程> http://www.deyisupport.com/question_answer/dsp_arm/sitar ...

  2. 【monkeyrunner】monkeyrunner脚本录制和回放

    脚本录制 1.连接你已经打开调试模式的ANDROID设备或模拟器,输入adb devices 2.运行录制脚本.在cmd窗口输入 monkeyrunner recorder.py #recorder. ...

  3. vim配置之tagbar

    vimConfig/plugin/tagbar-setting.vim let g:tagbar_width=4 map <F12> :TagbarToggle<CR> map ...

  4. 去掉Linux尖锐的提示音

    新装CentOS7,Tab键没有结果的时候,总是有尖锐的提示音,下面是如何去除这个提示音: # /etc/inputrc 找到 ‘#set bell-style none’,去掉注释# # reboo ...

  5. PhpStorm 配置在浏览器中打开文件

    这东东中文资料太少- -鼓捣了好久才有结果 点击File-Settings-Deployment .点+按钮增加服务器 Mapping 设置工程路径等 点击 Edit Confi 这东东中文资料太少- ...

  6. Mysql5.7忘记root密码及mysql5.7修改root密码的方法

    转自:http://www.jb51.net/article/77858.htm 关闭正在运行的 MySQL : ? 1 [root@www.woai.it ~]# service mysql sto ...

  7. HDU-5226 Tom and matrix(组合数求模)

    一.题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5226 二.题意 给一个大矩阵,其中,$a[i][j] = C_i^j$.输入5个参数,$x_1, ...

  8. Ansible 系列之 Inventory 资源清单介绍

    一.Inventory 库存清单文件 1.Inventory 作用 Ansible 可以在同一时间针对多个系统设施进行管理工作.它通过选择Ansible 资源清单文件中列出的系统,该清单文件默认是在/ ...

  9. django-中间件,流量统计实例

    Django中间件(Middleware) 中间件,顾名思义,就是处在中间的一些软件.比如匹配到了URL,但是还没有执行view函数的时候,这个时候可以执行一些代码,这个代码就是中间件. HttpRe ...

  10. 解决pip安装时的Readtime out问题

    方法一 pip --default-timeout=100 install -U Pillow就可以了方法二 pip install pyinstaller -i https://pypi.douba ...