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 Array(数组)相关方法简述
Jul 25 Javascript
Javascript继承(上)——对象构建介绍
Nov 08 Javascript
jquery设置控件位置的方法
Aug 21 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
Sep 02 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
Dec 03 Javascript
BootStrap Validator使用注意事项(必看篇)
Sep 28 Javascript
js html5 css俄罗斯方块游戏再现
Oct 17 Javascript
JavaScript实现跟随滚动缓冲运动广告框
Jul 15 Javascript
JS实现二维数组横纵列转置的方法
Apr 17 Javascript
Angular中sweetalert弹框的基本使用教程
Jul 22 Javascript
跟混乱的页面弹窗说再见
Apr 11 Javascript
基于javascript的拖拽类封装详解
Apr 19 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
索尼SONY ICF-SW7600GR电路分析与改良
2021/03/02 无线电
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
Session服务器配置指南与使用经验的深入解析
2013/06/17 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
PHP 图片合成、仿微信群头像的方法示例
2019/10/25 PHP
NodeJS的模块写法入门(实例代码)
2012/03/07 NodeJs
关于JS管理作用域的问题
2013/04/10 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
jQuery+PHP星级评分实现方法
2015/10/02 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
BootStrap Datetimepicker 汉化的实现代码
2017/02/10 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
2017/06/02 jQuery
js 图片转base64的方式(两种)
2018/04/24 Javascript
vue-swiper的使用教程
2018/08/30 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
2019/02/18 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
微信小程序实现下拉刷新动画
2019/06/21 Javascript
浅谈Vue2.4.0 $attrs与inheritAttrs的具体使用
2020/03/08 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
更新修改后的Python模块方法
2019/03/03 Python
python使用递归的方式建立二叉树
2019/07/03 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
eDreams澳大利亚:预订机票、酒店和度假产品
2017/04/19 全球购物
专业幼师实习生自我鉴定范文
2013/12/08 职场文书
法制宣传实施方案
2014/03/13 职场文书
腾讯广告词
2014/03/19 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
redis不能访问本机真实ip地址的解决方案
2021/07/07 Redis