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

首頁 > 編程 > JavaScript > 正文

JSON無限折疊菜單編寫實例

2019-11-20 21:27:23
字體:
供稿:網(wǎng)友

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

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

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

復(fù)制代碼 代碼如下:

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了 且上面的參數(shù)名 name submenu url是叫這樣的名字就可以了 ,然后直接可以在頁面HTML如下:

復(fù)制代碼 代碼如下:

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

CSS代碼如下:

復(fù)制代碼 代碼如下:

<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樣式可以自己下 沒有關(guān)系!

JS代碼如下:

復(fù)制代碼 代碼如下:

/**
 * 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傳進(jìn)來的數(shù)據(jù)
        type                :  'click',                    // 默認(rèn)為click 也可以mouseover
        renderCallBack      :  null,                       // 渲染html結(jié)構(gòu)后回調(diào)
        clickItemCallBack   : null                         // 每點擊某一項時候回調(diào)
    };
    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結(jié)構(gòu)
        $(_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();

        // 處理層級縮進(jìn)
        self._levelIndent(ulhtml);
    },
    /**
     * 創(chuàng)建子菜單
     * @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);
    },
    /**
     * 處理層級縮進(jìn)
     */
    _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));

        });
    }
 };


代碼初始化方式如下:

復(fù)制代碼 代碼如下:

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

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

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

JSON無限折疊菜單demo下載

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
夜夜躁狠狠躁日日躁婷婷小说| 久久午夜夜伦鲁鲁一区二区| 国产老女人精品毛片久久| 精品一区二区三区视频在线观看| 两个人看的在线视频www| 亚洲最大成人在线| 五月天婷婷综合社区| 日韩免费视频线观看| 老熟妇高潮一区二区高清视频| 欧美私人啪啪vps| 成人一区福利| 亚洲精品女人| 亚洲日本丝袜连裤袜办公室| 777午夜精品福利在线观看| 欧美另类一区二区三区| 青檬在线电视剧在线观看| 色94色欧美sute亚洲13| 欧美美乳在线| 日韩欧美亚洲一二三区| 18欧美乱大交| 国产精品福利一区二区三区| 亚洲乱熟女一区二区| 91免费公开视频| 久久综合九色综合久99| 污视频网站在线观看| 伊人成人免费视频| 26uuu精品一区二区在线观看| 一级日本黄色片| 午夜精品婷婷| 青青青青国产视频| 国产精品嫩草视频| 国产一级精品在线| 草草视频在线| 免费欧美视频| 亚洲电影欧美电影有声小说| 欧美午夜视频| 欧美一区二区三区免费在线看| 青草国产精品久久久久久| 你懂的视频欧美| 91精品在线一区| 91麻豆国产在线观看| 丰满岳妇乱一区二区三区| www.91视频.com| 在线观看欧美日韩电影| 免费成人av网站| 91视频成人| 国产精品丝袜在线| 亚洲一级黄色av| 玉米视频成人免费看| av在线不卡顿| 日韩久久精品| 男女在线视频| 一级黄色片视频| 葵司免费一区二区三区四区五区| 日本少妇性生活| 国产黄色一级网站| 国产精品露脸自拍| 国产网站欧美日韩免费精品在线观看| eeuss网址直达入口| 久久久久久77777| 欧美高清视频一区二区三区在线观看| 美女航空一级毛片在线播放| 制服丝袜亚洲精品中文字幕| 国产精品一区二区中文字幕| 亚洲国产欧洲综合997久久| 欧美成人三区| 精品久久在线观看| 一级片免费在线观看| 中文字幕一区二区人妻视频| 久久免费高清视频| 日韩激情综合| 午夜成年人在线免费视频| 日本午夜大片a在线观看| 亚洲精品大尺度| 奇米影视第四色7777| 欧美日韩在线三区| 国产精品99久久久久久宅男| 久久久av毛片精品| 欧美亚洲另类制服自拍| 亚洲国产精品成人综合色在线婷婷| 国产精成人品免费观看| 开心婷婷激情五月| 波多野结衣视频网址| 天堂在线第六区| 久久久久久久久久婷婷| 六月丁香在线视频| 久久色在线播放| 一区二区三区视频播放| 91精品久久久久久久久99蜜臂| 日本黄色女人| 在线满18网站观看视频| 欧美亚洲国产成人| 免费日韩av电影| 成人国产精品毛片| 免费99精品国产自在在线| 亚洲变态欧美另类捆绑| 国产羞羞视频在线播放| 亚洲熟女乱综合一区二区三区| 国产私人尤物无码不卡| 国产精品333| 大伊人狠狠躁夜夜躁av一区| 国产区精品在线观看| 香蕉久久a毛片| 精品无人区乱码1区2区3区在线| 亚洲综合一区二区不卡| 国产精品久久久久久久久久小说| 色老汉av一区二区三区| 成 人片 黄 色 大 片| 66精品视频在线观看| 中文字幕一区二区三区蜜月| 国产欧美在线一区二区| 亚洲精品中文字幕在线播放| 希岛爱理av免费一区二区| 韩国三级hd两男一女| 国产精品成人免费在线| 日韩亚洲欧美精品| 色屁屁草草影院ccyycom| 日本美女一级片| 五月婷婷中文字幕| 亚洲午夜天堂| 美女在线观看视频一区二区| 五月婷婷丁香六月| 中文人妻熟女乱又乱精品| 黄色片视频在线播放| 亚洲国产高清国产精品| 日韩av男人的天堂| 精品国产91亚洲一区二区三区婷婷| 成人国产1314www色视频| 日韩精品美女| 欧美第一区第二区| 日本午夜在线| 国产精品无码久久久久久| 亚洲视频在线播放免费| www.九九热.com| 国产成人综合在线| 91色国产在线| 亚洲产国偷v产偷v自拍涩爱| 成人精品视频在线播放| 在线观看一区日韩| 欧美性猛交xxxx免费看漫画| av无码精品一区二区三区宅噜噜| 成年人视频在线免费看| 在线日本成人| 国产免费黄色一级片| 国产米奇在线777精品观看| 青青草国产在线播放| 日本不卡电影| 波多野结衣一区二区三区四区| 中文字幕在线中文字幕二区| 一本大道伊人av久久综合| 亚洲精品成人无码毛片| 精品国产一区二区三区久久久| 亚洲伦伦在线| 亚洲美女视频在线免费观看| 肉色欧美久久久久久久免费看| 久久婷婷国产麻豆91| 高清一区二区| 91中文字幕在线视频| 亚洲精品一区二区妖精| 蜜月aⅴ免费一区二区三区| 亚洲一区二区三区影院| sis001亚洲原创区| 欧美色图色就是色| www久久日com| 精品视频色一区| 精品一区免费观看| 国产视频观看一区| 最新日韩av| 久久精品女人天堂av免费观看| 精品无人区麻豆乱码久久久| 周于希免费高清在线观看| 91免费看蜜桃| 狠狠干五月天| 欧美影院一区二区| 久香视频在线观看| 91影视免费在线观看| 色妞在线综合亚洲欧美| 亚洲婷婷免费| 欧美偷拍一区二区三区| 国产日韩在线视频| 高清国产mv在线观看| 欧美日韩亚州综合| 女同互忝互慰dv毛片观看| 日韩子在线观看| 亚洲永久精品免费| 污的视频网站| 91精品国产91久久久久久黑人| 北岛玲日韩精品一区二区三区| 伊大人久久香线焦宗合一75大| 亚洲午夜久久| 98精品国产高清在线xxxx天堂| 午夜精品久久久久久久久久久久| 国产h视频在线播放| 国产对白国语对白| 超碰成人福利| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| www.日本精品| xxxxxx在线观看| 国产色一区二区三区| 在线日韩精品视频| 欧美二区在线视频| 中文字幕中文乱码欧美一区二区| 国产午夜精品福利视频| 国产男女猛烈无遮挡a片漫画| 丁香桃色午夜亚洲一区二区三区| 正在播放精油久久| 久久久久精彩视频| 成人午夜一级| 国产一区二区在线观看免费视频| 欧美亚洲爱爱另类综合| 阿v视频在线| 羞羞小视频在线观看| 欧美国产日韩在线观看| 99热99热| 欧美成人专区| 成人黄色网址| 亚洲一区一卡| 99久久免费精品国产免费| 手机在线看福利| 国产精品免费一区二区| 久热综合在线亚洲精品| 欧美黄片一区二区三区| 精品无码人妻一区二区免费蜜桃| 国产网友自拍电影在线| 午夜理伦三级做爰电影| 黄色大片在线免费看| 亚洲第一黄色片| 亚洲一区av在线| 最近中文字幕在线mv视频在线| 97se亚洲国产综合自在线| 樱花草涩涩www在线播放| 黄网站欧美内射| 隔壁老王国产在线精品| 肥臀熟女一区二区三区| 国产九色在线| 大地资源第二页在线观看高清版| 欧洲精品久久| 免费一级欧美在线大片| 午夜精品久久久久久久男人的天堂| 美女视频一区| 中文字幕免费高清视频| 在线免费成人| 欧美国产综合一区二区| 亚洲欧洲日本专区| 在线观看免费av网| 嫩草嫩草嫩草嫩草嫩草| 国产女主播在线| 成人a'v在线播放| 欧美黄色精品| 久久久99精品视频| 日本精品久久久久| 亚洲精品一区二区三区影院| 国产在线观看欧美| 亚洲成人综合视频| 久草资源在线视频| 欧美成人精品福利| 一区二区三区在线|网站| 一区二区在线不卡| 亚洲精品久久区二区三区蜜桃臀| 不卡影院一区二区| 亚洲成人影院少妇| 午夜亚洲影视| 亚洲第一天堂| 91在线免费看片| 国产清纯白嫩初高中在线观看性色| 免费视频网站在线观看入口| 精品久久精品| 亚洲福利视频网站| 亚洲影视资源| 日韩成人毛片视频| 欧美成人tv| 午夜免费久久久久| 欧美日韩一区二区在线观看视频| 国产又粗又猛又爽又黄的视频四季| 懂色av成人一区二区三区| 日韩在线视频中文字幕| av女人的天堂| 九九视频在线免费观看| 一本久道久久综合狠狠爱亚洲精品| 风流老熟女一区二区三区| 色久视频在线播放| 亚洲成人av资源网| 欧美自拍第一页| 中文国产亚洲喷潮| 日本欧美www| 欧美激情综合色综合啪啪| 精品国产一区久久| 日本中文字幕观看| 国产伦精品一区二区三区精品视频| 成人污污视频| 亚洲 日韩 国产第一| 肉大捧一出免费观看网站在线播放| 免费人成又黄又爽又色| 手机看片福利在线观看| 久久久久久久久久久久久久久久av| 九色视频网址| 极品美女销魂一区二区三区| 免费观看成人鲁鲁鲁鲁鲁视频| 黄上黄在线观看| 91激情在线视频| 国产成人综合精品三级| 国产成人午夜视频| 日本高清不卡在线观看| 不卡一二三区| 在线手机中文字幕| 日韩少妇高潮抽搐| 色狠狠综合天天综合综合| 一区二区三区国产好的精华液| 久久综合久中文字幕青草| 国产欧美日韩中文字幕| 日韩av电影免费观看高清完整版| 奇米色一区二区三区四区| 欧美一区三区| 91久久精品一区二区| 国模一区二区三区私拍视频| 久久精品午夜一区二区福利| 狠狠色综合一区二区| 九色porny丨精品自拍视频| 精产国品一区二区三区| 日韩欧美在线视频免费观看| 欧美黄色免费网站| 男人天堂视频在线| 精品国产乱码久久久久久老虎| 日批视频在线看| 精品国产区一区| 久久国产成人午夜av影院| 自慰无码一区二区三区| 久久免费公开视频|