亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JSON無限折疊菜單編寫實例

2019-11-20 21:27:23
字體:
來源:轉載
供稿:網友

最近看了一篇關于JSON無限折疊菜單的文章 感覺寫的不錯,也研究了下代碼,所以用自己編碼方式也做了個demo 其實這樣的菜單項在我們網站上或者項目導航菜單項很常見的一種效果,特別是在一些電子商務網上上左側有分類是很常見的 或者說導航菜單有下拉效果也是很常見的,但是他們都是做死的 也就是頁面上代碼直接寫死的 然后實現那種下拉效果 而今天我們是通過JSON格式來自動生成的,或者可以說 要做這種折疊菜單效果 只需要開發人員提供我們前端開發這種JSON格式或者我們前端可以定這樣的格式也就ok了 其他的都可以直接引用這個代碼進去。下面給大家來分享下我的JS代碼!

下面我們來看看具體的效果如下:

下面我們來看看JSON個格式是個什么樣的 格式如下:

復制代碼 代碼如下:

var testMenu=[
    {
        "name": "一級菜單",
        "submenu": [
            {
                "name": "二級菜單",
                "url": ""
            },
            {
                "name": "二級菜單",
                "url": ""
            }
        ]
    },
    {
        "name": "一級菜單",
        "submenu": [
            {
                "name": "二級菜單",
                "url": ""
            },
            {
                "name": "二級菜單",
                "submenu": [
                    {
                        "name": "三級菜單",
                        "submenu": [
                            {
                                "name": "四級菜單",
                                "url": ""
                            }
                        ]
                    },
                    {
                        "name": "三級菜單",
                        "url": ""
                    }
                ]
            },
            {
                "name": "二級菜單",
                "url": ""
            },
            {
                "name": "二級菜單",
                "submenu": [
                    {
                        "name": "三級菜單",
                        "submenu": [
                            {
                                "name": "四級菜單",
                                "url": ""
                            },
                            {
                                "name": "四級菜單",
                                "submenu": [
                                    {
                                        "name": "五級菜單",
                                        "url": ""
                                    },
                                    {
                                        "name": "五級菜單",
                                        "url": ""
                                    }
                                ]
                            }
                        ]
                    },
                    {
                        "name": "三級菜單",
                        "url": ""
                    }
                ]
            },
            {
                "name": "二級菜單",
                "url": ""
            }
        ]
    },
    {
        "name": "一級菜單",
        "submenu": [
            {
                "name": "二級菜單",
                "url": ""
            },
            {
                "name": "二級菜單",
                "url": ""
            },
            {
                "name": "二級菜單",
                "url": ""
            }
        ]
    }
];

只要這種JSON格式就ok了 且上面的參數名 name submenu url是叫這樣的名字就可以了 ,然后直接可以在頁面HTML如下:

復制代碼 代碼如下:

<div class="wrap-menu"></div>

CSS代碼如下:

復制代碼 代碼如下:

<style type="text/css">
    .wrap-menu { overflow:auto; width:300px; background:#F6F6F6; font:12px/1.5 Tahoma,Arial,sans-serif}
    .wrap-menu ul{ list-style:none; margin:0; padding:0;}
    .wrap-menu ul li{ text-indent:3em; white-space:nowrap; }
    .wrap-menu ul li h2{ cursor:pointer; height:100%; width:100%; margin:0 0 1px 0; font:12px/31px '宋體'; color:#fff; background:red;}
    .wrap-menu ul li a{ display:block; outline:none; height:25px; line-height:25px; margin:1px 0; color:#1A385C; text-decoration:none;}
    .wrap-menu ul li img{ margin-right:10px; margin-left:-17px; margin-top:9px; width:7px; height:7px; background:url(images/arrow.gif) no-repeat; border:none;}
    .wrap-menu ul li img.unfold{ background-position:0 -9px;}
    .wrap-menu ul li a:hover{ background-color:#ccc; background-image:none;}
  </style>

css樣式可以自己下 沒有關系!

JS代碼如下:

復制代碼 代碼如下:

/**
 * JSON無限折疊菜單
 * @constructor {AccordionMenu}
 * @param {options} 對象
 * @date 2013-12-13
 * @author tugenhua
 * @email 879083421@qq.com
 */

 function AccordionMenu(options) {
    this.config = {
        containerCls        : '.wrap-menu',                // 外層容器
        menuArrs            :  '',                         //  JSON傳進來的數據
        type                :  'click',                    // 默認為click 也可以mouseover
        renderCallBack      :  null,                       // 渲染html結構后回調
        clickItemCallBack   : null                         // 每點擊某一項時候回調
    };
    this.cache = {

    };
    this.init(options);
 }


 AccordionMenu.prototype = {

    constructor: AccordionMenu,

    init: function(options){
        this.config = $.extend(this.config,options || {});
        var self = this,
            _config = self.config,
            _cache = self.cache;

        // 渲染html結構
        $(_config.containerCls).each(function(index,item){

            self._renderHTML(item);

            // 處理點擊事件
            self._bindEnv(item);
        });
    },
    _renderHTML: function(container){
        var self = this,
            _config = self.config,
            _cache = self.cache;
        var ulhtml = $('<ul></ul>');
        $(_config.menuArrs).each(function(index,item){
            var lihtml = $('<li><h2>'+item.name+'</h2></li>');

            if(item.submenu && item.submenu.length > 0) {
                self._createSubMenu(item.submenu,lihtml);
            }
            $(ulhtml).append(lihtml);
        });
        $(container).append(ulhtml);

        _config.renderCallBack && $.isFunction(_config.renderCallBack) && _config.renderCallBack();

        // 處理層級縮進
        self._levelIndent(ulhtml);
    },
    /**
     * 創建子菜單
     * @param {array} 子菜單
     * @param {lihtml} li項
     */
    _createSubMenu: function(submenu,lihtml){
        var self = this,
            _config = self.config,
            _cache = self.cache;
        var subUl = $('<ul></ul>'),
            callee = arguments.callee,
            subLi;

        $(submenu).each(function(index,item){
            var url = item.url || 'javascript:void(0)';

            subLi = $('<li><a href="'+url+'">'+item.name+'</a></li>');
            if(item.submenu && item.submenu.length > 0) {

                $(subLi).children('a').prepend('<img src="images/blank.gif" alt=""/>');
                callee(item.submenu, subLi);
            }
            $(subUl).append(subLi);
        });
        $(lihtml).append(subUl);
    },
    /**
     * 處理層級縮進
     */
    _levelIndent: function(ulList){
        var self = this,
            _config = self.config,
            _cache = self.cache,
            callee = arguments.callee;

        var initTextIndent = 2,
            lev = 1,
            $oUl = $(ulList);

        while($oUl.find('ul').length > 0){
            initTextIndent = parseInt(initTextIndent,10) + 2 + 'em';
            $oUl.children().children('ul').addClass('lev-' + lev)
                        .children('li').css('text-indent', initTextIndent);
            $oUl = $oUl.children().children('ul');
            lev++;
        }
        $(ulList).find('ul').hide();
        $(ulList).find('ul:first').show();   
    },
    /**
     * 綁定事件
     */
    _bindEnv: function(container) {
        var self = this,
            _config = self.config;

        $('h2,a',container).unbind(_config.type);
        $('h2,a',container).bind(_config.type,function(e){
            if($(this).siblings('ul').length > 0) {
                $(this).siblings('ul').slideToggle('slow').end().children('img').toggleClass('unfold');
            }

            $(this).parent('li').siblings().find('ul').hide()
                   .end().find('img.unfold').removeClass('unfold');
            _config.clickItemCallBack && $.isFunction(_config.clickItemCallBack) && _config.clickItemCallBack($(this));

        });
    }
 };


代碼初始化方式如下:

復制代碼 代碼如下:

$(function(){
    new AccordionMenu({menuArrs:testMenu});
});

大家也可以自己定義上面的JSON格式 然后引用我的css JS 也可以實現自己想要的效果 如果css上有自己的風格 也可以改寫css樣式!切忌!JSON格式一定要和我上面的一樣 且名字也要叫一樣的 就ok!初始化 如上

new AccordionMenu({menuArrs:testMenu}); 其中testMenu 就是上面定義的JSON格式。

JSON無限折疊菜單demo下載

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线观看精品国产视频| 51久久精品夜色国产麻豆| 精品色蜜蜜精品视频在线观看| 色婷婷久久一区二区| 日韩精品www| 久久精品成人动漫| 精品二区三区线观看| 性色av一区二区三区| 亚洲精品v天堂中文字幕| 日韩av片电影专区| 久久久久久久久久久免费精品| 麻豆国产va免费精品高清在线| 精品久久久久国产| 国产免费亚洲高清| 亚洲国产三级网| 国产精品自拍视频| 欧美老女人bb| 国产精品老牛影院在线观看| 亚洲影院色在线观看免费| 久久99青青精品免费观看| 在线免费观看羞羞视频一区二区| 88国产精品欧美一区二区三区| 日韩精品免费综合视频在线播放| 在线播放亚洲激情| 91免费国产视频| 最近2019好看的中文字幕免费| 久久97精品久久久久久久不卡| 国产日本欧美视频| 精品中文字幕在线观看| 在线观看亚洲区| 国产精品6699| 久久久精品一区二区| 亚洲精品美女网站| 日韩激情av在线播放| 国产一区二区丝袜| 亚洲女人天堂色在线7777| 国产成人精品日本亚洲| 亚洲人成伊人成综合网久久久| 久久久国产在线视频| 国产成人精彩在线视频九色| 秋霞成人午夜鲁丝一区二区三区| 日韩电影在线观看永久视频免费网站| 97超级碰在线看视频免费在线看| 色噜噜狠狠色综合网图区| 亚洲xxxxx电影| 黄色精品一区二区| 欧美不卡视频一区发布| 啪一啪鲁一鲁2019在线视频| 国产成人久久精品| 欧美丰满少妇xxxxx| 午夜精品久久久久久久99热浪潮| 日韩av免费观影| 亲子乱一区二区三区电影| 国产精品视频免费观看www| 韩国v欧美v日本v亚洲| 精品福利在线观看| 亚洲曰本av电影| 欧美电影院免费观看| 欧美日韩国产精品一区二区不卡中文| 亚洲欧美国内爽妇网| 91精品国产综合久久久久久久久| 欧美精品在线观看| 自拍偷拍亚洲一区| 少妇高潮 亚洲精品| 日韩av大片在线| 亚洲色图15p| 狠狠久久五月精品中文字幕| 亚洲成人黄色在线观看| 亚洲国产三级网| 91在线直播亚洲| 国内精品美女av在线播放| 国产精品中文在线| 国产精品午夜国产小视频| 久久99精品国产99久久6尤物| 97久久精品人人澡人人爽缅北| 国产精品视频久| 欧美日韩国产一区在线| 亚洲精品福利在线观看| 日韩av一区二区在线| 亚洲一二三在线| 精品视频www| 一区二区在线视频播放| 国产亚洲免费的视频看| 国产精品久久久久久久久久久久| 精品无码久久久久久国产| 成人黄色激情网| 日韩欧美在线观看| 欧美性猛交xxxx富婆| 欧美日韩国产一中文字不卡| 国产精品成人av性教育| 欧洲成人免费视频| 日韩欧美在线一区| 亚洲xxx大片| 精品国产91久久久久久老师| 欧美成人三级视频网站| 51精品在线观看| 在线观看欧美日韩| 亚洲国产古装精品网站| 1769国内精品视频在线播放| 成人国产精品久久久久久亚洲| 中文.日本.精品| 亚洲美女视频网站| 久久久久久久久久国产| 色樱桃影院亚洲精品影院| 欧美性生交xxxxxdddd| 日本欧美中文字幕| 亚洲精品日韩在线| www国产精品com| 欧美激情三级免费| 亚洲第一视频网站| 一区二区欧美久久| 中文字幕久热精品在线视频| 91在线免费观看网站| 中文字幕亚洲激情| www.欧美精品一二三区| 久久国产一区二区三区| 中文字幕亚洲综合久久筱田步美| 成人激情av在线| 亚洲精品久久视频| 69国产精品成人在线播放| 狠狠色狠狠色综合日日小说| 日韩欧美精品中文字幕| 久久频这里精品99香蕉| 中文字幕日韩欧美精品在线观看| 日韩视频免费中文字幕| 欧美日韩在线视频观看| 日韩亚洲欧美中文在线| 午夜精品久久久久久久白皮肤| 成人久久一区二区三区| 国产亚洲欧美一区| 一区二区三区四区精品| 97视频在线观看免费高清完整版在线观看| 午夜欧美不卡精品aaaaa| 日韩精品高清在线观看| 日韩美女在线观看一区| 黄色精品一区二区| 欧美精品18videos性欧| 国产精品成久久久久三级| 欧美丰满老妇厨房牲生活| 亚洲国产精彩中文乱码av在线播放| 国产日韩欧美日韩大片| 91视频国产一区| 欧美日韩亚洲一区二区三区| 国产精品日日做人人爱| 欧美亚洲国产日韩2020| 亚洲国产欧美一区| 久久不射热爱视频精品| 国产日韩欧美成人| 久久99久久99精品中文字幕| 久久精品视频在线播放| 久久网福利资源网站| 日韩免费黄色av| 91亚洲午夜在线| 亚洲精品一区二区三区婷婷月| 久久视频国产精品免费视频在线| 亚洲男人天堂2024| 欧美日韩中文字幕在线视频| 91精品国产精品| 91国语精品自产拍在线观看性色| 久久久久久av| 97香蕉久久超级碰碰高清版| 日韩精品视频免费专区在线播放| 欧美亚洲国产成人精品| 视频在线观看一区二区|