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 相关文章推荐
yepnope.js 异步加载资源文件
Sep 08 Javascript
在表单提交前进行验证的几种方式整理
Jul 31 Javascript
JavaScript字符串对象substring方法入门实例(用于截取字符串)
Oct 17 Javascript
浅析JavaScript事件和方法
Feb 28 Javascript
JavaScript实现列表分页功能特效
May 15 Javascript
jquery实现滑动特效代码
Aug 10 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
Jun 09 Javascript
iscroll动态加载数据完美解决方法
Jul 18 Javascript
Vue创建头部组件示例代码详解
Oct 23 Javascript
Vue数字输入框组件使用方法详解
Feb 10 Javascript
vue data变量相互赋值后被实时同步的解决步骤
Aug 05 Javascript
OpenLayer3自定义测量控件MeasureTool
Sep 28 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
php下将XML转换为数组
2010/01/01 PHP
fgetcvs在linux的问题
2012/01/15 PHP
解析Ubuntu下crontab命令的用法
2013/06/24 PHP
php递归删除指定文件夹的方法小结
2015/04/20 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
利用php输出不同的心形图案
2016/04/22 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
浅谈php://filter的妙用
2019/03/05 PHP
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
jQuery 获取对象 基本选择与层级
2010/05/31 Javascript
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
jQuery滚动条插件nanoscroller使用指南
2015/04/21 Javascript
js点击按钮实现带遮罩层的弹出视频效果
2015/12/19 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
简单实现jQuery进度条轮播实例代码
2016/06/20 Javascript
RequireJs的使用详解
2017/02/19 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
简单理解Vue中的nextTick方法
2018/01/30 Javascript
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
微信小程序前端自定义分享的实现方法
2019/06/13 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
Python自然语言处理 NLTK 库用法入门教程【经典】
2018/06/26 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
PyQt5下拉式复选框QComboCheckBox的实例
2019/06/25 Python
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
工程地质勘察专业大学生求职信
2013/10/13 职场文书
民主评议党员总结
2014/10/20 职场文书
保证书格式
2015/01/16 职场文书
大学生求职意向书
2015/05/11 职场文书
科技馆观后感
2015/06/08 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS