zoukankan      html  css  js  c++  java
  • 自写Jquery插件 Tab

    原创文章,转载请注明出处,谢谢!https://www.cnblogs.com/GaoAnLee/p/9067017.html 

    每每看到别人写的Jquery插件,自己也试着学习尝试,终有结果,废话不多说,直接上效果:

    直接撸代码:

    html:

    <body>
        <div id='tab' class='frame'></div>
    </body>

    css:

    @CHARSET "UTF-8";

    div, ul
    { overflow: hidden; margin: 0; padding: 0; } .main-content { padding: 20px 20px; } .tabs, .tabs ul li { float: left; } .tabs ul { list-style: none outside none; } .tabs ul li { line-height: 30px; margin-right: 2px; padding: 2px 10px 0 8px; -webkit-border-radius: 6px 6px 0 0; -moz-border-radius: 6px 6px 0 0; -ms-border-radius: 6px 6px 0 0; -o-border-radius: 6px 6px 0 0; border-radius: 6px 6px 0 0; font-size: 13px; cursor: default; } .tabs ul li em { display: inline-block; } .tabs ul li .tab-text, .tabs ul li .fa-close { cursor: pointer; } .tabs ul li i:first-child { margin-right: 5px; } .fa-close { margin-left: 10px; } .tab-nav { background-color: #EEEEEE; } .tab-nav-action { color: #3c8dbc; } .tabs-body { float: left; padding: 5px 0 0; } .tabs, .tabs-body { width: 100%; } .tab-nav-action, .tabs-body { background-color: #ffffff; } .tab-nav, .tabs-body { color: #000000; } .tabs-body div { padding: 10px; } .tabs-body-hide { display: none; } .tabs-body-show { display: block; }

    jquery.tab.js:

    /*
    <div id='tab'>
      //data
    </div>
    备注: 背景色建议为 #f4f4f4 最佳
    */
    
    //jquery插件 tab   auther:GaoAnLee
    ;
    (function($, window, document, undefined) {
        //初始化
        function _init(tab, b) {
            var _this = tab.element;
            var options = $.data(_this, 'tab').options;
            //第一次加载 添加tabs主体框架
            if (b) {
                _this.append('<div class="main-content"></div>');
                $('.main-content').append('<div class="tabs"></div>');
                $('.main-content').append('<div id="tabs-body" class="tabs-body"></div>');
                $('.tabs').append('<ul id="tabs"></div>');
            }
            //加载最简单tab
            $(options.tab).append('<li class="' + options.tabActiveClass + '"><i class=""></i><em class="tab-text">欢迎您</em><i class=""></i></li>');
            $(options.tabBody).append('<div class="' + options.tabBodyActiveClass + '">Welcome MMS !</div>');
    
            //切换tab
            switchTab(options);
            //删除tab
            delTab(options);
        }
        //切换tab
        function switchTab(options) {
            $('body').on(options.eventType, '.tab-text', function() {
                var parntNode = $(this).parent();
                var index = parntNode.index();
                parntNode.attr('Class', options.tabActiveClass).siblings().attr('Class', options.tabClass);
                $(options.tabBody).children().hide().eq(index).show();
            });
        }
        //删除tab
        function delTab(options) {
            $('body').on(options.eventType, '.fa-close', function() {
                var index = $(this).parent().index();
                var thisParentClass = $(this).parent().attr('Class');
                if (thisParentClass != options.tabClass) {
                    var _prev = $(this).parent().prev();
                    var prevIndex = _prev.index();
                    _prev.attr('Class', options.tabActiveClass);
                    $(options.tabBody).children().eq(prevIndex).show();
                }
                $(this).parent().remove();
                $(options.tabBody).children().eq(index).remove();
            });
        }
    
        /****************************_init() end****************************/
    
        //追加tab
        function addTab(options) {
            $(options.tab).children().attr('Class', options.tabClass);
            $(options.tabBody).children().hide();
            if (options.hasClose) {
                $(options.tab).append('<li class="' + options.tabActiveClass + '"><i class="fa ' + options.icon + '"></i><em class="tab-text">' + options.title + '</em><i class="fa fa-close"></i></li>');
            } else {
                $(options.tab).append('<li class="' + options.tabActiveClass + '"><i class="fa ' + options.icon + '"></i><em class="tab-text">' + options.title + '</em></li>');
            }
            $(options.tabBody).append('<div class="' + options.tabBodyActionClass + '">' + options.tabContent + '</div>');
        }
        //选中tab
        function selectTab(options) {
            var title = options.title;
            if (hasTab(title)) {
                if (!hasSelected(title)) {
                    var index = 0;
                    $(options.tab).children().each(function() {
                        var t = $(this).children('em').html();
                        if (t == title) {
                            index = $(this).index();
                        }
                    });
                    $(options.tab).children().eq(index).attr('Class', options.tabActiveClass).siblings().attr('Class', options.tabClass);
                    $(options.tabBody).children().hide().eq(index).show();
                }
            } else {
                addTab(options);
            }
        }
        //是否选中tab
        function hasSelected(parm) {
            var title = parm;
            var selectedTabText = $('.tab-nav-action').children('em').html().trim();
            if (selectedTabText == title) {
                return true;
            } else {
                return false;
            }
        }
        //是否存在tab
        function hasTab(parm) {
            var title = parm;
            var flag = false;
            $('#tabs').children().each(function() {
                var t = $(this).children('em').html();
                if (t == title) {
                    flag = true;
                }
            });
            return flag;
        }
    
        /*************************API function end*************************/
    
        var Tab = function(ele, options) {
            this.element = ele,
                this.defaults = {
                    tabActiveClass: 'tab-nav-action',
                    tabClass: 'tab-nav',
                    tabBodyActionClass: 'tabs-body-show',
                    tabBodyClass: 'tabs-body-hide',
                    tab: '#tabs',
                    tabBody: '#tabs-body',
                    eventType: 'click'
                },
                this.options = $.extend({}, this.defaults, options)
        };
        Tab.prototype = {
            //选中tab
            selectTab: function(options) {
                selectTab(options);
                return false;
            },
            //是否选中指定tab
            hasSelected: function(parm) {
                return hasSelected(parm);
            },
            //是否存在tab
            hasTab: function(parm) {
                return hasTab(parm);
            },
            //在最后追加tab
            addTab: function(options) {
                addTab(options);
                return false;
            }
        };
        $.fn.tab = function(target, parm) {
            var tab = new Tab(this, target);
            if (typeof target == 'string' && typeof parm == 'string') {
                return tab[target](parm);
            }
            if (typeof target == 'string' && typeof parm == 'object') {
                var options = $.extend({}, tab.defaults, parm);
                return tab[target](options);
            }
            var state = $.data(this, 'tab');
            if (state) {
                var dataOptions = state.options;
                var newOptions = $.extend({}, dataOptions, target);
                $.data(this, 'tab', {
                    options: newOptions,
                    e: this
                });
            } else {
                $.data(this, 'tab', {
                    options: $.extend({}, tab.options, target),
                    e: this
                });
            }
            return this.each(function(){
          _init(tab,true);
         });
    }; })(jQuery, window, document); $(function() { $('#tab').tab(); //先加载启动 //测试 $('#tab').tab('addTab', { icon: 'fa-sitemap', title: '公司管理', hasClose: true, tabContent: '111111111111111' }); $('#tab').tab('addTab', { icon: 'fa-th-list', title: '部门管理', hasClose: true, tabContent: '2222' }); var flag = $('#tab').tab('hasSelected', '公司管理'); console.log(flag); //false flag = $('#tab').tab('hasTab', '公司管理'); console.log(flag); //true $('#tab').tab('selectTab', { icon: 'fa-sitemap', title: '公司管理', hasClose: true, tabContent: '111111111111111' }); });
  • 相关阅读:
    Spring解决循环依赖的三种方式
    MySQL深度分页
    MySQL大数据量分页查询方法及其优化
    java进程 cpu100%问题排查
    Java线程池如何合理配置核心线程数
    Btree和B+tree的区别
    Python3 for Linux 安装
    redis sentinel 相关参数及命令
    postman 连接mysql
    oracle-数据库的各种-锁-详解
  • 原文地址:https://www.cnblogs.com/GaoAnLee/p/9067017.html
Copyright © 2011-2022 走看看