Jquery封装tab自动切换效果的具体实现


Posted in Javascript onJuly 13, 2013

  今天我这边网速真是太慢了,打开一个网页要等待很久,但是还是想写篇文章----tab自动切换 因为工作中经常会碰到这样的问题 所以写博客也是总结下 最重要的是能分享下 及以后碰到类似的可以参考下! 当然这是我用Jquery来封装的 页面可以调用多次 调用方式                new tabSlider(obj,count); obj指容器最外层ID,count指有多个li 当然要引用我这个js的话 一定要按照我结构来写!下面的是我的HTML一些结构如下:

<div id="tab1">
    <ul class="menu">
        <li class="current">tab1</li>
        <li>tab2</li>
        <li>tab3</li>
        <li class="last-col">tab4</li>
    </ul>
    <div class="content-main">
        <div class="content">tab1</div>
        <div class="content hide">tab2</div>
        <div class="content hide">tab3</div>
        <div class="content hide">tab4</div>
    </div>
</div>

结构是这样的!下面是我页面上的HTML/CSS的代码!
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<style>
#tab1{ width:196px; height:220px; overflow:hidden; border:1px solid #666;} 
#tab2{ width:196px; height:220px; overflow:hidden; border:1px solid #666;} 
.menu{ width:196px; height:18px; margin:0; padding:0;} 
.menu li{ float:left; list-style:none; width:48px; text-align:center; border-bottom:1px solid #666; border-right:1px solid #666; cursor:pointer;} 
.menu li.current{ border-bottom:none;} 
.content-main{ width:196px; height:200px; overflow:hidden;} 
.content{ width:196px; height:200px; overflow:hidden; display:block;} 
.hide{ display:none;width:196px; height:200px; overflow:hidden;} 
.menu li.last-col{ border-right:none; width:49px;} 
</style>
<script src="AutoTab.js"></script>
</head>
<body>
<div id="tab1">
    <ul class="menu">
        <li class="current">tab1</li>
        <li>tab2</li>
        <li>tab3</li>
        <li class="last-col">tab4</li>
    </ul>
    <div class="content-main">
        <div class="content">tab1</div>
        <div class="hide">tab2</div>
        <div class="hide">tab3</div>
        <div class="hide">tab4</div>
    </div>
</div>
<br /><br />
<div id="tab2">
    <ul class="menu">
        <li class="current">tab1</li>
        <li>tab2</li>
        <li>tab3</li>
        <li class="last-col">tab4</li>
    </ul>
    <div class="content-main">
        <div class="content">tab1</div>
        <div class="hide">tab2</div>
        <div class="hide">tab3</div>
        <div class="hide">tab4</div>
    </div>
</div>
<script>new tabSlider("#tab1",4);</script>
<script>new tabSlider("#tab2",4);</script>
</body>
</html>

JS代码如下:
// JavaScript Document 
    /* 
    *@date 2011 10 24 
    *@ author tugenhua 
    *@ email tugenhua@126.com 
    *@ 可以一个页面多次引用 
    依赖的结构 */
    <div id="tab1"> 
    <ul class="menu"> 
        <li class="current">tab1</li> 
        <li>tab2</li> 
        <li>tab3</li> 
        <li class="last-col">tab4</li> 
    </ul> 
    <div class="content-main"> 
        <div class="content">tab1</div> 
        <div class="content hide">tab2</div> 
        <div class="content hide">tab3</div> 
        <div class="content hide">tab4</div> 
    </div> 
</div> 
/*页面引用的方式 
    new tabSlider("#tab1",4); 
    #tab1 是外部ID,4 指 一共有多少个li 
*/
function tabSlider(obj,count){ 
    var _this = this; 
        _this.obj = obj; 
        _this.count = count; 
        _this.time = 2000;//停留的时间 
        _this.n = 0; 
        var  t; 
        this.slider = function(){ 
            $(_this.obj + " .menu li").bind("mouseover",function(event){ 
                $(event.target).addClass("current").siblings().removeClass("current"); 
                var index = $(_this.obj + " .menu li").index(this); 
                $(_this.obj + " .content-main .content").eq(index).show().siblings().hide(); 
                _this.n = index;     
            })   
        } 
        this.addhover = function(){ 
            $(_this.obj).hover(function(){clearInterval(t);},function(){t=setInterval(_this.autoplay,_this.time)});  
        } 
        this.autoplay = function(){ 
            _this.n = _this.n >=(_this.count-1)? 0 : ++_this.n; 
            $(_this.obj + " .menu li").eq(_this.n).trigger("mouseover");     
        }    
        this.factory = function(){ 
            this.slider(); 
            this.addhover(); 
            t = setInterval(this.autoplay,_this.time);   
        } 
        this.factory(); 
}

下面来说说下我封装这个js的思路,因为写任何程序 思路是最重要的,只要能想的清楚 代码就一定能实现掉!思路说的更好听的话 就是我们常说的“算法”!
1 function tabSlider(obj,count){} 用这个js来封装后传入参数!当在HTML页面上时直接调用tabSlider(obj,count)就可以了!
2 初始化一些参数 然后给这个函数自生自定义一个函数this.slider = function(){} 绑定个mouseover事件,初始化第一个li时 查找当前的div内容是否和当前li 指向同一个指针 如果相同 那块内容显示!其他的隐藏!
3 自定义this.addHover这个事件  当鼠标移上时候抽发这个事件!
4 自定义自动播放事件this.autoplay = function(){} 这个里面用了trigger这个触发方法_this.n = _this.n >=(_this.count-1)? 0 : ++_this.n;
   $(_this.obj + " .menu li").eq(_this.n).trigger("mouseover");
5 最后用个函数 来渲染上面的函数 调用上面的函数
this.factory = function(){
   this.slider();
   this.addhover();
   t = setInterval(this.autoplay,_this.time);
  }
  this.factory();
Javascript 相关文章推荐
在Z-Blog中运行代码[html][/html](纯JS版)
Mar 25 Javascript
firebug的一个有趣现象介绍
Nov 30 Javascript
YUI模块开发原理详解
Nov 18 Javascript
jQuery中Dom的基本操作小结
Jan 23 Javascript
JavaScript中的Math.atan2()方法使用详解
Jun 15 Javascript
Jquery easyui 实现动态树
Nov 17 Javascript
jQuery实现二级下拉菜单效果
Jan 05 Javascript
jQuery获取attr()与prop()属性值的方法及区别介绍
Jul 06 Javascript
jQuery的$.extend 浅拷贝与深拷贝
Mar 08 Javascript
详解weex默认webpack.config.js改造
Jan 08 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
Mar 10 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
Aug 07 Javascript
JS图片根据鼠标滚动延时加载的实例代码
Jul 13 #Javascript
js confirm()方法的使用方法实例
Jul 13 #Javascript
js获取GridView中行数据的两种方法 分享
Jul 13 #Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
Jul 13 #Javascript
浅析ajax请求json数据并用js解析(示例分析)
Jul 13 #Javascript
网页前端优化之滚动延时加载图片示例
Jul 13 #Javascript
JavaScript获取FCK编辑器信息的具体方法
Jul 12 #Javascript
You might like
PHP中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
php中stdClass的用法分析
2015/02/27 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
2016/11/01 PHP
PHP abstract 抽象类定义与用法示例
2018/05/29 PHP
利用进制转换压缩数字函数分享
2014/01/02 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
layer 刷新某个页面的实现方法
2019/09/05 Javascript
Python ZipFile模块详解
2013/11/01 Python
Python简单获取自身外网IP的方法
2016/09/18 Python
python使用matplotlib绘图时图例显示问题的解决
2017/04/27 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
python re.sub()替换正则的匹配内容方法
2019/07/22 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
Pandas将列表(List)转换为数据框(Dataframe)
2020/04/24 Python
Django框架实现在线考试系统的示例代码
2020/11/30 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
浅析HTML5的WebSocket与服务器推送事件
2016/02/19 HTML / CSS
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
英国手机壳购买网站:Case Hut
2019/04/11 全球购物
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
中学教师实习自我鉴定
2013/09/28 职场文书
经理助理岗位职责
2014/03/05 职场文书
库房保管员岗位职责
2014/04/07 职场文书
工地安全标语
2014/06/07 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
2014年售后服务工作总结
2014/11/18 职场文书
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js
JavaScript原型链详解
2021/11/07 Javascript