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变量以及其作用域详解
Jul 18 Javascript
借助javascript代码判断网页是静态还是伪静态
May 05 Javascript
windows8.1+iis8.5下安装node.js开发环境
Dec 12 Javascript
jQuery中insertAfter()方法用法实例
Jan 08 Javascript
jQuery实现类似淘宝网图片放大效果的方法
Jul 08 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
Apr 17 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
Oct 15 Javascript
关于javascript获取内联样式与嵌入式样式的实例
Jun 01 Javascript
使用JS组件实现带ToolTip验证框的实例代码
Aug 23 Javascript
基于JavaScript实现简单的音频播放功能
Jan 07 Javascript
JavaScript实现获取select下拉框中第一个值的方法
Feb 06 Javascript
使用 Element UI Table 的 slot-scope方法
Oct 10 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 cli模式下获取参数的方法
2017/05/05 PHP
Alliance vs Liquid BO3 第一场2.13
2021/03/10 DOTA
javascript上传图片前预览图片兼容大多数浏览器
2013/10/25 Javascript
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
javascript匀速动画和缓冲动画详解
2016/10/20 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
基于jquery实现九宫格拼图小游戏
2018/11/30 jQuery
详解vue2.6插槽更新v-slot用法总结
2019/03/09 Javascript
12个提高JavaScript技能的概念(小结)
2019/05/09 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
Python获取Linux系统下的本机IP地址代码分享
2014/11/07 Python
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
python处理二进制数据的方法
2015/06/03 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
matplotlib中legend位置调整解析
2017/12/19 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
Python爬取腾讯视频评论的思路详解
2019/12/19 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
Python语言异常处理测试过程解析
2020/01/08 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
自我鉴定的范文
2013/10/03 职场文书
机电一体化专业应届生求职信
2013/11/27 职场文书
图书室管理制度
2014/01/19 职场文书
真诚的求职信
2014/07/04 职场文书
学校与家长安全责任书
2014/07/23 职场文书
小学生十佳少年事迹材料
2014/08/20 职场文书
群众路线个人剖析材料及整改措施
2014/11/04 职场文书
学校三八妇女节活动总结
2015/02/06 职场文书
初中班主任教育随笔
2015/08/15 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书
详解CSS故障艺术
2021/05/25 HTML / CSS
新手入门Mysql--概念
2021/06/18 MySQL
sql通过日期判断年龄函数的示例代码
2021/07/16 SQL Server
JS数组去重详情
2021/11/07 Javascript