Tab切换组件(选项卡功能)实例代码


Posted in Javascript onNovember 21, 2013

直接贴代码里面有注释:

/**
 * 简单的Tab切换
 * 支持可配置项 如下参数 
 */
    function Tab(){
        this.config = {
            type            : 'mouseover',    //类型 默认为鼠标移上去
            autoplay        : true,           // 默认为自动播放
            triggerCls      : '.list',        // 菜单项
            panelCls        : '.tabContent',  // 内容项
            index           : 0,              // 当前的索引0
            switchTo        : 0,              // 切换到哪一项
            interval        : 3000,              // 自动播放间隔时间 默认为3 以s为单位
            pauseOnHover    : true,           // 鼠标放上去是否为暂停 默认为true
            current         : 'current',      // 当前项添加到类名
            hidden          : 'hidden',       // 类名 默认为hidden
            callback        : null            // callback函数
        };
        this.cache = {
            timer : undefined,
            flag  : true
        };
    }
    Tab.prototype = {
        init: function(options){
            this.config = $.extend(this.config,options || {});
            var self = this,
                _config = self.config;
            self._handler();
        },
        _handler: function(){
            var self = this,
                _config = self.config,
                _cache = self.cache,
                len = $(_config.triggerCls).length;
            $(_config.triggerCls).unbind(_config.type);
            $(_config.triggerCls).bind(_config.type,function(){
                _cache.timer && clearInterval(_cache.timer);
                var index = $(_config.triggerCls).index(this);
                !$(this).hasClass(_config.current) && 
                $(this).addClass(_config.current).siblings().removeClass(_config.current);
                $(_config.panelCls).eq(index).removeClass(_config.hidden).siblings().addClass(_config.hidden);
                // 切换完 添加回调函数
                _config.callback && $.isFunction(_config.callback) && _config.callback(index);
            });
            // 默认情况下切换到第几项
            if(_config.switchTo) {
                $(_config.triggerCls).eq(_config.switchTo).addClass(_config.current).siblings().removeClass(_config.current);
                $(_config.panelCls).eq(_config.switchTo).removeClass(_config.hidden).siblings().addClass(_config.hidden);
            }
            // 自动播放
            if(_config.autoplay) {
                start();
                $(_config.triggerCls).hover(function(){
                    if(_config.pauseOnHover) {
                        _cache.timer && clearInterval(_cache.timer);
                        _cache.timer = undefined;
                    }else {
                        return;
                    }
                },function(){
                    start();
                });
            }
            function start(){
                _cache.timer = setInterval(autoRun,_config.interval);
            }
            function autoRun() {
                if(_config.switchTo && (_config.switchTo == len-1)){
                    if(_cache.flag) {
                        _config.index = _config.switchTo;
                        _cache.flag = false;
                    }
                }
                _config.index++;
                if(_config.index == len) {
                    _config.index = 0;
                }
                $(_config.triggerCls).eq(_config.index).addClass(_config.current).siblings().removeClass(_config.current);
                $(_config.panelCls).eq(_config.index).removeClass(_config.hidden).siblings().addClass(_config.hidden);
            }
        }
    };

页面上调用方式如下:

$(function(){
    new Tab().init({
        switchTo: 1,
        callback: function(index){
            console.log(index);
        }
    });
});
Javascript 相关文章推荐
Draggable Elements 元素拖拽功能实现代码
Mar 30 Javascript
jQuery 源码分析笔记(6) jQuery.data
Jun 08 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
Apr 12 Javascript
简单纯js实现点击切换TAB标签实例
Aug 23 Javascript
在AngularJS中如何使用谷歌地图把当前位置显示出来
Jan 25 Javascript
Javascript闭包与函数柯里化浅析
Jun 22 Javascript
jQuery实现的简单百分比进度条效果示例
Aug 01 Javascript
AngularJS自定义插件实现网站用户引导功能示例
Nov 07 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
Sep 18 Javascript
js prototype深入理解及应用实例分析
Nov 25 Javascript
ES6中的Javascript解构的实现
Oct 30 Javascript
JavaScript中的Proxy对象
Nov 27 Javascript
JS仿百度搜索自动提示框匹配查询功能
Nov 21 #Javascript
探讨javascript是不是面向对象的语言
Nov 21 #Javascript
JS中把字符转成ASCII值的函数示例代码
Nov 21 #Javascript
Javascript对象属性方法汇总
Nov 21 #Javascript
获得Javascript对象属性个数的示例代码
Nov 21 #Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
Nov 21 #Javascript
浅析JavaScript中的常用算法与函数
Nov 21 #Javascript
You might like
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
PHP分页详细讲解(有实例)
2013/10/30 PHP
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
2012/12/25 Javascript
Node.js中require的工作原理浅析
2014/06/24 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
angular.JS实现网页禁用调试、复制和剪切
2017/03/31 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
2018/08/20 Javascript
vue实现一个炫酷的日历组件
2018/10/08 Javascript
[03:08]Ti4观战指南上
2014/07/07 DOTA
[44:41]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
浅谈python中的变量默认是什么类型
2016/09/11 Python
Python数据分析之如何利用pandas查询数据示例代码
2017/09/01 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
Python数据类型之列表和元组的方法实例详解
2019/07/08 Python
Python绘制二维曲线的日常应用详解
2019/12/04 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
tensorflow转换ckpt为savermodel模型的实现
2020/05/25 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
Canvas实现放大镜效果完整案例分析(附代码)
2020/11/26 HTML / CSS
业务部经理岗位职责
2014/01/04 职场文书
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
监察建议书范文
2014/03/12 职场文书
明信片寄语大全
2014/04/08 职场文书
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
美术学专业求职信
2014/07/23 职场文书
学习三严三实对照检查材料思想汇报
2014/09/22 职场文书
辞职信怎么写
2015/02/27 职场文书
施工安全协议书
2016/03/22 职场文书
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL
Go语言 详解net的tcp服务
2022/04/14 Golang