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 相关文章推荐
在网页中屏蔽快捷键
Sep 06 Javascript
JavaScript 异步调用框架 (Part 6 - 实例 &amp; 模式)
Aug 04 Javascript
利用js实现选项卡的特别效果的实例
Mar 03 Javascript
JS模拟自动点击的简单实例
Aug 08 Javascript
JQuery点击行tr实现checkBox选中的简单实例
May 26 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
Apr 23 Javascript
使用grunt合并压缩js和css文件的方法
Mar 02 Javascript
vue中如何引入jQuery和Bootstrap
Apr 10 jQuery
ComboBox(下拉列表框)通过url加载调用远程数据的方法
Aug 06 Javascript
js实现HTML中Select二级联动的实例
Jan 05 Javascript
使用svg实现动态时钟效果
Jul 17 Javascript
浅谈vue引用静态资源需要注意的事项
Sep 28 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转成EXE文件
2006/10/09 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
php生成word并下载代码实例
2019/03/15 PHP
PHP使用HTML5 FormData对象提交表单操作示例
2019/07/02 PHP
jQuery Ajax文件上传(php)
2009/06/16 Javascript
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
javascript学习笔记(十五) js间歇调用和超时调用
2012/06/20 Javascript
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
NodeJS学习笔记之Http模块
2015/01/13 NodeJs
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
jQuery 调用WebService 实例讲解
2016/06/28 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
jQuery动态移除与增加onclick属性的方法详解
2018/06/07 jQuery
vue 弹出遮罩层样式实例
2020/07/22 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
VueCli生产环境打包部署跨域失败的解决
2020/11/13 Javascript
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
python使用 HTMLTestRunner.py生成测试报告
2017/10/20 Python
Python入门之三角函数全解【收藏】
2017/11/08 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
django 信号调度机制详解
2019/07/19 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
会计学财务管理专业个人的自我评价
2013/10/19 职场文书
企业负责人任命书
2014/06/05 职场文书
医院保洁服务方案
2014/06/11 职场文书
学校与家长安全责任书
2014/07/23 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
2014年班组建设工作总结
2014/12/01 职场文书
世界气象日活动总结
2015/02/27 职场文书
城南旧事读书笔记
2015/06/29 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记