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 相关文章推荐
动态调用css文件——jquery的应用
Feb 20 Javascript
豆瓣网的jquery代码实例
Jun 15 Javascript
JavaScript将数据转换成整数的方法
Jan 04 Javascript
你有必要知道的25个JavaScript面试题
Dec 29 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
Sep 17 Javascript
vue-自定义组件传值的实例讲解
Sep 18 Javascript
jQuery实现动态添加和删除input框实例代码
Mar 26 jQuery
jsonp实现百度下拉框功能的方法分析
May 10 Javascript
JavaScript的Proxy可以做哪些有意思的事儿
Jun 15 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
Apr 08 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
Aug 27 Javascript
JavaScript事件循环及宏任务微任务原理解析
Sep 02 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与XML、XSLT、Mysql的结合运用实现代码
2009/11/19 PHP
浅析php插件 HTMLPurifier HTML解析器
2013/07/01 PHP
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
2017/12/13 PHP
javascript firefox不显示本地预览图片问题的解决方法
2008/11/12 Javascript
jQuery函数的等价原生函数代码示例
2013/05/27 Javascript
JS批量操作CSS属性详细解析
2013/12/16 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
jQuery遍历节点树方法分析
2016/09/08 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
2016/11/22 Javascript
jQuery中的deferred使用方法
2017/03/27 jQuery
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
vue-cli的eslint相关用法
2017/09/29 Javascript
ES6 fetch函数与后台交互实现
2018/11/14 Javascript
js常见遍历操作小结
2019/06/06 Javascript
JavaScript监听一个DOM元素大小变化
2020/04/26 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
简单的Python2.7编程初学经验总结
2015/04/01 Python
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
单链表反转python实现代码示例
2018/02/08 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
Python中面向对象你应该知道的一下知识
2019/07/10 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
IntelliJ 中配置 Anaconda的过程图解
2020/06/01 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
python中二分查找法的实现方法
2020/12/06 Python
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
财务会计专业应届毕业生求职信
2013/10/18 职场文书
微型企业创业投资计划书
2014/01/10 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
张思德观后感
2015/06/09 职场文书
七夕情人节问候语
2015/11/11 职场文书
javascript实现计算器功能详解流程
2021/11/01 Javascript