简体   繁体   English

如何使下拉菜单打开dropup?

[英]How to make dropdown menu to open dropup?

How can I make my dropdown menu to a drop-up menu, so it shows like Windows start button? 如何将我的下拉菜单设置为下拉菜单,因此它显示为Windows启动按钮?

The menu should be in the lower left corner. 菜单应位于左下角。
The menu should open if you click on the button. 如果单击按钮,则应打开菜单。
While it should open upwards. 虽然它应该向上开放。
It should look and work in the end, like the Windows 7 start menu. 最终应该看起来和工作,如Windows 7开始菜单。

Here is my code: 这是我的代码:

 var MainMenu = function() { var activated = false; var settings = { disabledClass: 'disabled', submenuClass: 'submenu' } var mask = '<div id="menu-top-mask" style="height: 2px; background-color: #fff; z-index:1001;"/>'; var timeOut; this.init = function(p) { $.extend(settings, p); $mask = $('#menu-top-mask'); $('ul.main-menu > li').click(function(event) { var target = $(event.target); if (target.hasClass(settings.disabledClass) || target.parents().hasClass(settings.disabledClass) || target.hasClass(settings.submenuClass)) { return; } toggleMenuItem($(this)); }); $('ul.main-menu > li > ul li').click(function(event) { // Prevent click event to propagate to parent elements event.stopPropagation(); // Prevent any operations if item is disabled if ($(this).hasClass(settings.disabledClass)) { return; } // If item is active, check if there are submenus (ul elements inside current li) if ($(this).has("ul").length > 0) { // Automatically toggle submenu, if any toggleSubMenu($(this)); } else { // If there are no submenus, close main menu. closeMainMenu(); } }); $('ul.main-menu > li').mouseenter(function() { if (activated && $(this).hasClass('active-menu') == false) { toggleMenuItem($(this)); } }); $('ul.main-menu > li > ul li').mouseenter(function(e) { // Hide all other opened submenus in same level of this item $el = $(e.target); if ($el.hasClass('separator')) return; clearTimeout(timeOut); var parent = $el.closest('ul'); parent.find('ul.active-sub-menu').each(function() { if ($(this) != $el) $(this).removeClass('active-sub-menu').hide(); }); // Show submenu of selected item if ($el.children().size() > 0) { timeOut = setTimeout(function() { toggleSubMenu($el) }, 500); } }); $('ul.main-menu > li > ul li').each(function() { if ($(this).children('ul').size() > 0) { $(this).addClass(settings.submenuClass); } }); $('ul.main-menu li.' + settings.disabledClass).bind('click', function(e) { e.preventDefault(); }); //#region - Toggle Main Menu Item - toggleMenuItem = function(el) { // Hide all open submenus $('.active-sub-menu').removeClass('active-sub-menu').hide(); $('#menu-top-mask').remove(); var submenu = el.find("ul:first"); var top = parseInt(el.css('padding-bottom').replace("px", ""), 10) + parseInt(el.css('padding-top').replace("px", ""), 10) + el.position().top + el.height(); submenu.prepend($(mask)); var $mask = $('#menu-top-mask'); var maskWidth = el.width() + parseInt(el.css('padding-left').replace("px", ""), 10) + parseInt(el.css('padding-right').replace("px", ""), 10); $mask.css({ position: 'absolute', top: '-1px', width: (maskWidth) + 'px' }); submenu.css({ position: 'absolute', top: top + 'px', left: el.offset().left + 'px', zIndex: 100 }); submenu.stop().toggle(); activated = submenu.is(":hidden") == false; !activated ? el.removeClass('active-menu') : el.addClass('active-menu'); if (activated) { $('.active-menu').each(function() { if ($(this).offset().left != el.offset().left) { $(this).removeClass('active-menu'); $(this).find("ul:first").hide(); } }); } } //#endregion //#region - Toggle Sub Menu Item - toggleSubMenu = function(el) { if (el.hasClass(settings.disabledClass)) { return; } var submenu = el.find("ul:first"); var paddingLeft = parseInt(el.css('padding-right').replace('px', ''), 10); var borderTop = parseInt(el.css('border-top-width').replace("px", ""), 10); borderTop = !isNaN(borderTop) ? borderTop : 1; var top = el.position().top - borderTop; submenu.css({ position: 'absolute', top: top + 'px', left: el.width() + paddingLeft + 'px', zIndex: 1000 }); submenu.addClass('active-sub-menu'); submenu.show(); //el.mouseleave(function () { // submenu.hide(); //}); } //#endregion closeMainMenu = function() { activated = false; $('.active-menu').find("ul:first").hide(); $('.active-menu').removeClass('active-menu'); $('.active-sub-menu').hide(); }; $(document).keyup(function(e) { if (e.keyCode == 27) { closeMainMenu(); } }); $(document).bind('click', function(event) { var target = $(event.target); if (!target.hasClass('active-menu') && !target.parents().hasClass('active-menu')) { closeMainMenu(); } }); } } $(document).ready(function() { new MainMenu().init(); }); 
 body { padding: 10px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 13px; font-weight: normal; } .main-menu { position: absolute; /*position: relative;*/ display: inline-block; z-index: 9999; bottom: 0px; } #menu-bar { bottom: 100%; } ul.main-menu { list-style-type: none; margin: 0px 0px 10px 0px; padding: 0px; } ul.main-menu>li { margin: 0; display: inline; list-style-type: none; padding: 6px 4px 6px 6px; line-height: 28px; vertical-align: middle; cursor: default; outline: none; border-style: solid; border-width: 1px 1px 0 1px; border-color: transparent; } ul.main-menu>li.active-menu { background-color: #fff; border-color: #ccc; -webkit-box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2); -moz-box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2); box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2); } ul.main-menu ul li a { color: #000; text-decoration: none; display: block; white-space: nowrap; } ul.main-menu li ul li a span { font-size: 11px; color: #999; float: right; right: 10px; left: auto; position: absolute; } /* SUBMENU */ ul.main-menu>li ul { list-style-type: none; padding: 0; margin: 0; display: none; border-width: 1px; border-style: solid; border-color: #ccc; background-color: #fff; -webkit-box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2); -moz-box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2); box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2); } ul.main-menu li ul li { display: list-item; margin: 0; line-height: 26px; padding-right: 40px; min-width: 100px; cursor: pointer; text-indent: 30px; white-space: nowrap; } ul.main-menu li:hover { background-color: whiteSmoke; /*#fef7cb;*/ } ul.main-menu li.active-menu:hover { background-color: #fff; } ul.main-menu li ul li.disabled, ul.main-menu li ul li.disabled:hover, ul.main-menu li ul li.disabled a { color: #ddd; cursor: default; background-color: #fff; } ul.main-menu li.separator { border-top: 1px solid #ddd; margin-top: 5px; margin-bottom: 5px; } .submenu { background-image: url(../images/menu-right-arrow.png); background-repeat: no-repeat; background-position: right center; } /* ICONS ********************************************/ .icon { background-image: url(../images/icons/icons-sprite.png); background-repeat: no-repeat; } /*.new-product { background-position: left -52px; } .new-document { background-position: left -2px; } .new-client { background-position: left -26px; }*/ .print { background-position: left -369px; } .save { background-position: left -444px; } 
 <script src="http://code.jquery.com/jquery-latest.min.js"></script> <script src="../js/jquery.menu.js"></script> <link href="../css/menu.css" rel="stylesheet" type="text/css" /> <div id="menu-bar"> <ul class="main-menu"> <li> Menu <ul> <li>Documents <ul> <li>All</li> <li class="separator"></li> <li>Unfinished</li> <li>Closed</li> </ul> </li> <li><a href="/#!/products">Products</a></li> <li class="separator"></li> <li> First level <ul> <li> Second level <ul> <li> Third level menu item </li> <li> Third level <ul> <li> Forth level menu item 1 </li> <li> Forth level menu item 2 </li> </ul> </li> <li class="separator"></li> <li>Another third level menu item</li> </ul> </li> <li> Items will make menus stretch as needed </li> <li class="separator"></li> <li> Another menu item </li> </ul> </li> <li class="separator"></li> <li>Reports <ul> <li>Sell history</li> <li>Clients history</li> </ul> </li> </ul> </li> </ul> <!-- end mainmenu --> </div> 

just need to change the top property to bottom . 只需要将top属性更改为bottom

in your case: 在你的情况下:

submenu.css({
    position: 'absolute',
    bottom: top + 'px',
    left: el.offset().left + 'px',
    zIndex: 100
});

the rest should works fine 其余的应该没问题

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM