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 相关文章推荐
使用onbeforeunload属性后的副作用
Mar 08 Javascript
文本框文本自动补全效果示例分享
Jan 19 Javascript
javascript实现英文首字母大写
Apr 23 Javascript
JS加载器如何动态加载外部js文件
May 26 Javascript
让你一句话理解闭包(简单易懂)
Jun 03 Javascript
jQuery基本筛选选择器实例代码
Feb 06 Javascript
分析javascript原型及原型链
Mar 18 Javascript
浅析Vue 生命周期
Jun 21 Javascript
Vue中的异步组件函数实现代码
Jul 20 Javascript
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
Aug 22 Javascript
layui 地区三级联动 form select 渲染的实例
Sep 27 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
Oct 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在文件指定行中写入代码的方法
2012/05/23 PHP
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
php绘制一条直线的方法
2015/01/24 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
php中使用websocket详解
2016/09/23 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
laravel admin实现分类树/模型树的示例代码
2020/06/10 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
JS清除选择内容的方法
2015/01/29 Javascript
director.js实现前端路由使用实例
2015/02/03 Javascript
javascript结合canvas实现图片旋转效果
2015/05/03 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
详解angularJs中自定义directive的数据交互
2017/01/13 Javascript
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
[01:32]寻找你心中的那团火 DOTA2 TI9火焰传递活动今日开启
2019/05/16 DOTA
python 测试实现方法
2008/12/24 Python
Python中实现常量(Const)功能
2015/01/28 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
2017/07/08 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
2018/02/24 Python
python XlsxWriter模块创建aexcel表格的实例讲解
2018/05/03 Python
python面试题之列表声明实例分析
2019/07/08 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
2019/07/09 Python
Django创建一个后台的基本步骤记录
2020/10/02 Python
Python confluent kafka客户端配置kerberos认证流程详解
2020/10/12 Python
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
canvas像素画板的实现代码
2018/11/21 HTML / CSS
小橄榄树:Le Petit Olivier
2018/04/23 全球购物
The North Face北面美国官网:美国著名户外品牌
2018/09/15 全球购物
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
本科生个人求职自荐信
2013/09/26 职场文书
花卉与景观设计系大学生求职信
2013/10/01 职场文书
党校自我鉴定范文
2013/10/02 职场文书
2015教师年度考核评语
2015/03/25 职场文书
mysql insert 存在即不插入语法说明
2022/03/25 MySQL