2016-02-25 43 views
0

我尝试创建悬停多个可配置为JSON的下拉上下文菜单。JSON数据多下拉菜单

$(function() { 
 

 
    var data = { 
 
\t \t menu: [{ 
 
\t \t \t name: 'Ukraine', 
 
\t \t \t link: '0', 
 
\t \t \t sub: null 
 
\t \t }, { 
 
\t \t \t name: 'Croatia', 
 
\t \t \t link: '1', 
 
\t \t \t sub: null 
 
\t \t }, { 
 
\t \t \t name: 'Denmark', 
 
\t \t \t link: '2', 
 
\t \t \t sub: null 
 
\t \t }, { 
 
\t \t \t name: 'Canada', 
 
\t \t \t link: '3', 
 
\t \t \t sub: null 
 
\t \t }, { 
 
\t \t \t name: 'Columbia', 
 
\t \t \t link: '4', 
 
\t \t \t sub: null 
 
\t \t }, { 
 
\t \t \t name: 'Japan', 
 
\t \t \t link: '5', 
 
\t \t \t sub: null 
 
\t \t }, { 
 
\t \t \t name: 'Wales', 
 
\t \t \t link: '6', 
 
\t \t \t sub: null 
 
\t \t }, { 
 
\t \t \t name: 'England', 
 
\t \t \t link: '7', 
 
\t \t \t sub: [{ 
 
\t \t \t \t name: 'Arsenal', 
 
\t \t \t \t link: '0-0', 
 
\t \t \t \t sub: null 
 
\t \t \t }, { 
 
\t \t \t \t name: 'Liverpool', 
 
\t \t \t \t link: '0-1', 
 
\t \t \t \t sub: null 
 
\t \t \t }, { 
 
\t \t \t \t name: 'Manchester United', 
 
\t \t \t \t link: '0-2', 
 
\t \t \t \t sub: null 
 
\t \t \t }] 
 
\t \t }, { 
 
\t \t \t name: 'Spain', 
 
\t \t \t link: '8', 
 
\t \t \t sub: [{ 
 
\t \t \t \t name: 'Barcelona', 
 
\t \t \t \t link: '2-0', 
 
\t \t \t \t sub: null 
 
\t \t \t }, { 
 
\t \t \t \t name: 'Real Madrid', 
 
\t \t \t \t link: '2-1', 
 
\t \t \t \t sub: null 
 
\t \t \t }] 
 
\t \t }, { 
 
\t \t \t name: 'Germany', 
 
\t \t \t link: '9', 
 
\t \t \t sub: [{ 
 
\t \t \t \t name: 'Bayern Munich', 
 
\t \t \t \t link: '3-1', 
 
\t \t \t \t sub: null 
 
\t \t \t }, { 
 
\t \t \t \t name: 'Borrusia Dortmund', 
 
\t \t \t \t link: '3-2', 
 
\t \t \t \t sub: null 
 
\t \t \t }] 
 
\t \t }] 
 
    }; 
 
    var getMenuItem = function (itemData) { 
 
     var item = $("<li>") 
 
      .append(
 
     $("<a>", { 
 
      href: '#' + itemData.link, 
 
      html: itemData.name 
 
     })); 
 
     if (itemData.sub) { 
 
      var subList = $("<ul>"); 
 
      $.each(itemData.sub, function() { 
 
       subList.append(getMenuItem(this)); 
 
      }); 
 
      item.append(subList); 
 
     } 
 
     return item; 
 
    }; 
 
    
 
    var $menu = $("#menu"); 
 
    $.each(data.menu, function() { 
 
     $menu.append(
 
      getMenuItem(this) 
 
     ); 
 
    }); 
 
    $menu.menu(); 
 
});
<head> 
 
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css"> 
 

 
<style> 
 

 
.ui-widget-content{padding-left: 20px;} 
 

 
.ui-menu { 
 
    width: 150px; 
 
    height: 250px; 
 
    overflow-x: hidden; 
 
    direction: rtl; 
 
    padding-left: 20px; 
 
} 
 
.ui-menu { 
 
    overflow-y: hidden; 
 
} 
 
.ui-menu:hover { 
 
    overflow-y: scroll; 
 
} 
 

 
.ui-menu .ui-menu-item{ 
 
\t 
 
\t  float: left; 
 
    display: block; 
 
} 
 

 
.ui-widget .ui-widget{ 
 
\t position: fixed; 
 
\t overflow: hidden; 
 
\t direction: ltr; 
 
\t padding-left: 0; 
 
} 
 
.ui-menu .ui-menu{ 
 
    position: fixed; 
 
} 
 

 

 
::-webkit-scrollbar { 
 
    width: 13px; 
 
} 
 
body{ 
 
    overflow-y:hidden; 
 
    padding-right:12px; 
 
} 
 
body:hover{ 
 
    overflow-y:scroll; 
 
    padding-right:0px; 
 
} 
 
/* Track */ 
 
::-webkit-scrollbar-track { 
 
    background: gray; 
 
} 
 

 
/* Handle */ 
 
::-webkit-scrollbar-thumb { 
 
    background: gray; 
 
} 
 

 
::-webkit-scrollbar-button { 
 
    background: #3C3838; 
 
    
 
} 
 
    </style> 
 
</head> 
 
<body> 
 
\t <ul id="menu" ></ul> 
 

 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script> 
 
    
 
</body>

如何改善这种代码更好地为菜单项: *如果我点击菜单,除了它应该关闭另一个地方。 *如果菜单不适合屏幕自定义滚动应该出现(如下所示:long list menu

当用户单击向上/向下箭头时,应该会发生滚动。菜单必须向上/向下滚动1项。我尝试了其他选项,但它不起作用。用纯JavaScript创建它会更好吗?

回答

0

您可以将显示在页面上添加一个跨度/隐藏菜单

$('#showmenu').on(' mouseover', function() { 
    $menu.show().focus(); 
    }); 
    $menu.on('mouseleave',function(){ 
    $(this).hide(); 
    }); 

在操作中查看这里:https://jsfiddle.net/MarkSchultheiss/sm3wpmLa/