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 相关文章推荐
弹出广告特效代码(一个IP只弹出一次)
May 11 Javascript
JavaScript接口实现代码 (Interfaces In JavaScript)
Jun 11 Javascript
jquery导航制件jquery鼠标经过变色效果示例
Dec 05 Javascript
利用原生JavaScript获取元素样式只是获取而已
Oct 08 Javascript
jQuery中:password选择器用法实例
Jan 03 Javascript
jQuery+Ajax实现无刷新分页
Oct 30 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
Apr 14 Javascript
jQuery实现手机版页面翻页效果的简单实例
Oct 05 Javascript
vue2.0构建单页应用最佳实战
Apr 01 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
Mar 05 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
Nov 03 Javascript
Javascript 解构赋值详情
Nov 17 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
laravel5.1框架基础之Blade模板继承简单使用方法分析
2019/09/05 PHP
Prototype最新版(1.5 rc2)使用指南(1)
2007/01/10 Javascript
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
基于jquery的一个拖拽到指定区域内的效果
2011/09/21 Javascript
Jquery 实现表格颜色交替变化鼠标移过颜色变化实例
2013/08/28 Javascript
IE 下Enter提交表单存在重复提交问题的解决方法
2014/05/04 Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
2014/07/17 Javascript
javascript ajax的5种状态介绍
2014/08/18 Javascript
javascript根据时间生成m位随机数最大13位
2014/10/30 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
javascript中call apply 的应用场景
2015/04/16 Javascript
javascript显式类型转换实例分析
2015/04/25 Javascript
js+html5实现canvas绘制镂空字体文本的方法
2015/06/05 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
2016/01/18 Javascript
jquery判断页面网址是否有效的两种方法
2016/12/11 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
vue 表单之通过v-model绑定单选按钮radio
2019/05/13 Javascript
vue el-table实现自定义表头
2019/12/11 Javascript
vue2和vue3的v-if与v-for优先级对比学习
2020/10/10 Javascript
[01:41]DOTA2 2015国际邀请赛中国区预选赛第三日战报
2015/05/28 DOTA
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
Autopep8的使用(python自动编排工具)
2021/03/02 Python
工程开工庆典邀请函
2014/02/01 职场文书
信息科学与技术专业求职信范文
2014/02/20 职场文书
病媒生物防治方案
2014/05/13 职场文书
质量管理标语
2014/06/12 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
个人作风建设总结
2014/10/23 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
党组织结对共建协议书
2016/03/23 职场文书
Redis特殊数据类型Geospatial地理空间
2022/06/01 Redis