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 相关文章推荐
js创建对象的几种常用方式小结(推荐)
Oct 24 Javascript
jquery的extend和fn.extend的使用说明
Jan 09 Javascript
jquery对dom的操作常用方法整理
Jun 25 Javascript
JS验证图片格式和大小并预览的简单实例
Oct 11 Javascript
如何使用headjs来管理和异步加载js
Nov 29 Javascript
axios学习教程全攻略
Mar 26 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
Nov 14 Javascript
微信小程序的线程架构【推荐】
May 14 Javascript
js实现图片推拉门效果代码实例
May 18 Javascript
js的新生代垃圾回收知识点总结
Aug 22 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
Mar 26 Javascript
实例讲解React 组件生命周期
Jul 08 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
自动把纯文本转换成Web页面的php代码
2009/08/27 PHP
php下统计用户在线时间的一种尝试
2010/08/26 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
PDO::beginTransaction讲解
2019/01/27 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
Extjs 几个方法的讨论
2010/01/28 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
自己封装的一个简单的倒计时功能实例
2016/11/23 Javascript
深入理解javascript函数参数与闭包
2016/12/12 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
es6 字符串String的扩展(实例讲解)
2017/08/03 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
2018/05/08 Javascript
vue elementui form表单验证的实现
2018/11/11 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
python3解析库pyquery的深入讲解
2018/06/26 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
Python如何计算语句执行时间
2019/11/22 Python
python selenium操作cookie的实现
2020/03/18 Python
什么是Python中的匿名函数
2020/06/02 Python
Python命名空间及作用域原理实例解析
2020/08/12 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
英国一家专门出售品牌鞋子的网站:Allsole
2016/08/07 全球购物
养殖行业的创业计划书
2014/01/05 职场文书
党支部书记先进事迹
2014/01/17 职场文书
研究生毕业鉴定
2014/01/29 职场文书
学生个人自我鉴定
2014/03/26 职场文书
小学安全教育月活动总结
2014/07/07 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
2021/07/01 MySQL