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 相关文章推荐
JavaScript 浮点数运算 精度问题
Oct 06 Javascript
JavaScript 数组运用实现代码
Apr 13 Javascript
jQuery修改class属性和CSS样式整理
Jan 30 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
Mar 22 Javascript
Vue.js每天必学之过滤器与自定义过滤器
Sep 07 Javascript
原生js实现放大镜特效
Mar 08 Javascript
原生js实现简单的模态框示例
Sep 08 Javascript
JavaScript中set与get方法用法示例
Aug 15 Javascript
vue-cli中使用高德地图的方法示例
Mar 28 Javascript
layui 实现表单和文件上传一起传到后台的例子
Sep 16 Javascript
实例分析JS中的相等性判断===、 ==和Object.is()
Nov 17 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
Dec 30 jQuery
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
PHP IF ELSE简化/三元一次式的使用
2011/08/22 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
2014/07/22 PHP
php获取当月最后一天函数分享
2015/02/02 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
js 数组操作代码集锦
2009/04/28 Javascript
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
js如何实现设计模式中的模板方法
2013/07/23 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
详解js闭包
2014/09/02 Javascript
js倒计时简单实现方法
2015/12/17 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
微信小程序 底部导航栏目开发资料
2016/12/05 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
jquery插件开发之选项卡制作详解
2017/08/30 jQuery
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
angular4应用中输入的最小值和最大值的方法
2019/05/17 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
2020/09/09 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
Python读取txt某几列绘图的方法
2018/10/14 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
python scipy卷积运算的实现方法
2019/09/16 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
Python多线程通信queue队列用法实例分析
2020/03/24 Python
浅谈pytorch中的BN层的注意事项
2020/06/23 Python
意大利体育用品网上商城:Nencini Sport
2016/08/18 全球购物
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
《值日生》教学反思
2014/02/17 职场文书
机关单位人员学雷锋心得体会
2014/03/10 职场文书
自我推荐信格式模板
2015/03/24 职场文书
活着观后感
2015/06/03 职场文书
标枪加油稿
2015/07/22 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
javascript进阶篇深拷贝实现的四种方式
2022/07/07 Javascript