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的闭包详解
Dec 26 Javascript
javascript实现表格增删改操作实例详解
May 15 Javascript
JQuery中层次选择器用法实例详解
May 18 Javascript
jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍
Sep 01 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
Feb 09 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
Mar 14 Javascript
ES6 javascript的异步操作实例详解
Oct 30 Javascript
vue购物车插件编写代码
Nov 27 Javascript
JS实现对json对象排序并删除id相同项功能示例
Apr 18 Javascript
JavaScript callback回调函数用法实例分析
May 08 Javascript
vue+axios 前端实现的常用拦截的代码示例
Aug 23 Javascript
vue实现下载文件流完整前后端代码
Nov 17 Vue.js
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中的MYSQL常用函数(php下操作数据库必备)
2010/09/12 PHP
PHP上传图片、删除图片简单实例
2016/11/12 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
utf8的编码算法 转载
2006/12/27 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
javascript中call apply 的应用场景
2015/04/16 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
js实现点击每个li节点,都弹出其文本值及修改
2016/12/15 Javascript
JS实现Ajax的方法分析
2016/12/20 Javascript
ES6学习教程之对象字面量详解
2017/10/09 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
2018/04/20 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
2019/02/02 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
2019/05/22 Javascript
Vue-cli3.X使用px2 rem遇到的问题及解决方法
2019/08/08 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
Vue清除定时器setInterval优化方案分享
2020/07/21 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
在python的类中动态添加属性与生成对象
2016/09/17 Python
Python编程之event对象的用法实例分析
2017/03/23 Python
Django学习之文件上传与下载
2019/10/06 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
Sisley法国希思黎中国官网:享誉全球的奢华植物美容品牌
2019/06/30 全球购物
给同学的道歉信
2014/01/16 职场文书
青年安全生产示范岗事迹材料
2014/05/04 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
雷锋的故事观后感
2015/06/10 职场文书
张丽莉观后感
2015/06/16 职场文书
小程序与后端Java接口交互实现HelloWorld入门
2021/07/09 Java/Android
PO模式在selenium自动化测试框架的优势
2022/03/20 Python