mmenu: 一次只展开一个子菜单 (slidingSubmenus: false)

Posted

技术标签:

【中文标题】mmenu: 一次只展开一个子菜单 (slidingSubmenus: false)【英文标题】:mmenu: expand only one submenu at a time (slidingSubmenus: false) 【发布时间】:2016-02-04 05:14:43 【问题描述】:

我喜欢在我的 Web 项目中使用 mmenu:http://mmenu.frebsite.nl/。我应该设置slidingSubmenus: false,但为了节省垂直空间,我应该自动折叠以前展开的子菜单,如果展开新的子菜单 - 即当时只展开一个子菜单。 这些是客户的要求。

请看一下这个例子:http://plnkr.co/edit/O2CCBYuXtxnHH7wbdqMa?p=preview [1]

如果我们展开About us,然后About us 2,第一个应该折叠起来。

这可以使用本机设置还是使用简单的技巧? 我还找到了How to toggle the vertical jQuery.mmenu submenus?,但我希望有一个更清洁的解决方案 - 巴德拉

[1] 感谢 ankoehn (https://***.com/users/5174279/ankoehn) 的回答 https://***.com/a/31727879/4106030(这是我的 plunker 的基础 - 我还需要 AngularJS 的解决方案)。

【问题讨论】:

【参考方案1】:

此修订只允许在任何级别一次打开一个子菜单。

$('.mm-next').click(function()
  var myMenu = $(this).closest('.mm-vertical');
  myMenu.parent().children('.mm-vertical').not(myMenu).removeClass('mm-opened');
)

http://plnkr.co/edit/axlVAHBb38boNMoqxJ1D?p=preview (我的第一个 plnkr 和 SO 答案,希望它有效:)

【讨论】:

谢谢多姆。如果您还添加了更新的 plunker(或 jsfiddle 或其他),我会将您的答案设置为已接受。【参考方案2】:

由于您使用的是 jQuery,您可以添加一些 jQuery 来执行此操作:

jQuery(document).ready(function()
 $('.mm-next').click(function()
   var myMenu = $(this).closest('.mm-vertical');
   $('.mm-vertical').not(myMenu).removeClass('mm-opened');
  )
)

更新 plunker http://plnkr.co/edit/3kr45X8fPnGMo64wXc7j?p=preview

这只是从您打开的当前项目以外的项目中删除打开的类。

【讨论】:

谢谢你,里奥!这很棒。我看到我需要学习一些关于 jQuery 的基础知识...... - 有一个问题,如果我们有子菜单 - 我们不能再打开第 3 级 - 但是,我认为有了更多的 jQuery 知识,我将能够解决此问题。【参考方案3】:

我正在尝试遵循 Dom 的解决方案,但它在我这边无法正常工作。 请问哪部分不正确。

$('.mm-btn-next').click(function()
  var myMenu = $(this).closest('.mm-listitem_vertical'); 
  myMenu.parent().children('.mm-listitem_vertical').not(myMenu).removeClass('mm-listitem_opened');
);

我在 codepen 上的输出,https://codepen.io/faliqt/pen/vYXpXGW

谢谢大家。

【讨论】:

以上是关于mmenu: 一次只展开一个子菜单 (slidingSubmenus: false)的主要内容,如果未能解决你的问题,请参考以下文章

单击父级时仅打开一个子菜单

android添加友盟自动更新的时候,如何使app打开一次只提示一次,而不是随着Acitvity的变动而一直提示。

我想在 React 中做一个下拉菜单。单击一个按钮应打开一个子菜单。在子菜单之外单击应将其关闭

一次只打开一个引导下拉菜单

在 li ng-click 上仅切换 1 个子菜单,不允许另一个 li 打开

ng-repeat 和 Mmenu 子菜单