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

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

    可以结合我自写的Jquery插件Tab 一起使用哦

    上一个整体效果

    直接撸代码:

    html:

    <body>
        <div id='menu' class='west'></div>
    </body>

    css:

    @CHARSET "UTF-8";
    
    /******************* start west ***********************/
    
    .sidebar-toggle {
        height: 30px;
        line-height: 30px;
        color: #aeb9c2;
        background-color: #4A5064;
        font-size: 14px;
        text-align: center;
        cursor: pointer;
    }
    
    .sidebar-toggle .fa {
        margin-top: 10px;
    }
    
    .main-menu {
        font-size: 13px;
    }
    
    .main-menu ul {
        background-color: #42485b;
        color: #ffffff;
        width: 225px;
    }
    
    .main-menu ul, .main-menu li {
        position: relative;
        list-style: none;
        border: 0;
        cursor: pointer;
    }
    
    .main-menu li>a {
        height: 20px;
        display: block;
        text-decoration: none;
        padding: 15px 15px;
    }
    
    .main-menu li>a>span {
        margin-left: 5px;
    }
    
    .main-menu a:hover{
        background-color: #00C1DE;
    }
    
    .two-level li a{
      padding: 15px 35px;
    }
    
    .three-level li a{
      padding: 15px 55px;
    }
    
    /*菜单第一级*/
    .main-menu .two-level {
        /*关闭第二级*/
        display: none;
    }
    
    /*菜单第二级*/
    .main-menu .open .two-level {
        display: block;
        /*打开第二级*/
    }
    
    .main-menu .open .two-level .three-level {
        /*关闭第三级*/
        display: none;
    }
    
    /*菜单第三级*/
    .main-menu .three-level {
        /*关闭第三级*/
        display: none;
    }
    
    .main-menu .open .two-level .open .three-level {
        /*打开第三级*/
        display: block;
    }
    
    
    /*右侧小图标*/
    .menu-arrow {
        position: absolute;
        top: 16.5px;
        right: 10px;
    }
    
    .menu-arrow:after, .main-menu .one-level .open .two-level .menu-arrow:after {
        content: "f104";
    }
    
    .main-menu .one-level .open .menu-arrow:after, .main-menu .one-level .open .two-level .open .menu-arrow:after {
        content: "f106";
    }
    /*隐藏url*/
    .url {
        display: none;
    }
    
    
    /******************* end west ***********************/

     jquery.menu.js:

    /**
     * menu
     * auther GaoAnLee
     * <div id='menu' class='west'>
     *     //js-data
     * </div>
     */
    ;
    (function($, window, document, undefined) {
        //初始化
        function _init(menu, b) {
            var _this = menu.element;
            var options = $.data(_this, 'menu').options;
            if (b) {
                _this.html('<div class="sidebar-toggle"><i class="fa fa-fw fa-dedent"></i></div><div class="main-menu"></div>');
            }
            openOrCloseMenu(options);
            selectTab();
        }
        //ajax加载数据 url
        function loadData(parm) {
            //loadMenu
            $.ajax({
                type: 'get',
                url: parm,
                dataType: 'text',
                success: function(data) {
                    var menu = eval('(' + data + ')');
                    warpMenu(menu);
                },
                error: function(XMLHttpRequest, textStatus, errorThrown) {
                    if (textStatus == 'error') {
                        console.log('ajax error ! value of textStatus is error ! menu.js:line 34');
                    }
                }
            });
        }
        //warpMenu
        function warpMenu(menu) {
            if (menu.code == 200) {
                var buffer1 = '<ul class="one-level">';
                var buffer2 = '';
                var buffer3 = '';
                for (var i = 0, len1 = menu.data.length; i < len1; i++) {
                    buffer1 += '<li class="has-children">';
                    var idOne = menu.data[i].id;
                    var nameOne = menu.data[i].name;
                    var iconOne = menu.data[i].icon;
                    var urlOne = menu.data[i].url;
                    var childrenOne = menu.data[i].children;
                    buffer1 += '<a id="' + idOne + '"><i class="fa fa ' + iconOne + '"></i><span>' + nameOne + '</span><span class="menu-arrow fa"></span><p class="url">' + urlOne + '</p></a>';
                    buffer2 += '<ul class="menu-submenu two-level">';
                    for (var j = 0, len2 = childrenOne.length; j < len2; j++) {
                        buffer2 += '<li class="has-children">';
                        var idTwo = childrenOne[j].id;
                        var nameTwo = childrenOne[j].name;
                        var iconTwo = childrenOne[j].icon;
                        var urlTwo = childrenOne[j].url;
                        var childrenTwo = childrenOne[j].children;
                        buffer2 += '<a id="' + idTwo + '"><i class="fa fa ' + iconTwo + '"></i><span>' + nameTwo + '</span>';
                        if (!(typeof(childrenTwo) == 'undefined')) {
                            buffer2 += '<span class="menu-arrow fa"></span>';
                        }
                        buffer2 += '<p class="url">' + urlTwo + '</p></a>';
                        if (!(typeof(childrenTwo) == 'undefined')) {
                            buffer3 += '<ul class="menu-submenu three-level">';
                            for (var k = 0, len3 = childrenTwo.length; k < len3; k++) {
                                buffer3 += '<li class="">';
                                var idThree = childrenTwo[k].id;
                                var nameThree = childrenTwo[k].name;
                                var iconThree = childrenTwo[k].icon;
                                var urlThree = childrenTwo[k].url;
                                buffer3 += '<a id="' + idThree + '"><i class="fa fa ' + iconThree + '"></i><span>' + nameThree + '</span><p class="url">' + urlThree + '</p></a>';
                                buffer3 += '</li>';
                            }
                            buffer3 += '</ul>';
                            buffer2 += buffer3;
                            buffer3 = '';
                        }
                        buffer2 += '</li>';
                    }
                    buffer2 += '</ul>';
                    buffer1 += buffer2;
                    buffer2 = '';
                }
                buffer1 += '</ul>';
                $('.main-menu').html(buffer1);
            } else {
                alert(menu.message);
            }
        }
        //打开和关闭菜单
        function openOrCloseMenu(options) {
            //打开关闭菜单
            $('body').on('click', '.has-children', function(event) {
                var obj = $(this);
                obj.toggleClass('open');
                event.stopPropagation(); //关键在于阻止冒泡
                return false;
            });
            $('body').on('click', '.menu-submenu li', function(event) {
                event.stopPropagation(); //关键在于阻止冒泡
                return false;
            });
        }
        //menu click to select tab
        function selectTab() {
            //菜单切换tabs
            $('body').on('click', '.main-menu li', function() {
                var obj = $(this).children('a').children('span:last');
                //判断是否有子菜单
                if (!obj.hasClass('menu-arrow')) {
                    var title = $(this).children('a').children('span').html();
                    var id = $(this).children('a').attr('id');
                    var url = $(this).children('a').children('p').html();
                    var icon = $(this).children('a').children('i').attr('class');
                    var tabContent = '<iframe id="mainiframe" width="100%" height="100%" frameborder="0" scrolling="auto" src="' + url + '"></iframe>';
                    $('#tab').tab('selectTab', {
                        icon: icon,
                        title: title,
                        hasClose: true,
                        tabContent: tabContent
                    });
                }
                return false;
            });
        }
        var Menu = function(e, options) {
            this.element = e,
                this.defaults = {
                    menu: '#menu',
                    loadUrl: 'data/menu.txt'
                },
                this.options = $.extend({}, this.defaults, options);
        };
        Menu.prototype = {
            //通过url重新加载
            loadUrl: function(options) {
                $('.main-menu').html('');
                loadData(options.loadUrl);
            },
            //通过数据重新加载
            loadData: function(options) {
                $('.main-menu').html('');
                warpMenu(options.data);
            }
        };
        $.fn.menu = function(target, parm) {
            var menu = new Menu(this, target);
            if (typeof target == 'string' && typeof parm == 'string') {
                return menu[target](parm);
            }
            if (typeof target == 'string' && typeof parm == 'object') {
                var options = $.extend({}, menu.defaults, parm);
                return menu[target](options);
            }
            var state = $.data(this, 'menu');
            if (state) {
                var dataOptions = state.options;
                var newOptions = $.extend({}, dataOptions, target);
                $.data(this, 'menu', {
                    options: newOptions,
                    e: this
                });
            } else {
                $.data(this, 'menu', {
                    options: $.extend({}, menu.options, target),
                    e: this
                });
            }
            return this.each(function(){
          _init(menu,true)
         }); }; })(jQuery, window, document); $(function() { $('#menu').menu(); //加载menu //加载数据 url $('#menu').menu('loadUrl', { loadUrl: 'data/menu.txt' }); });
  • 相关阅读:
    二分图最大匹配的K&#246;nig定理及其证明
    HDOJ 2389 Rain on your Parade
    HDOJ 1083 Courses
    HDOJ 2063 过山车
    POJ 1469 COURSES
    UESTC 1817 Complete Building the Houses
    POJ 3464 ACM Computer Factory
    POJ 1459 Power Network
    HDOJ 1532 Drainage Ditches
    HDU 1017 A Mathematical Curiosity
  • 原文地址:https://www.cnblogs.com/GaoAnLee/p/9067543.html
Copyright © 2011-2022 走看看