菜单展开关闭(点击一个,关闭其他)

1、这里的菜单不仅仅是菜单栏,也可以是文章模块等。

2、主要实现的效果:点击其中一个,关闭或展开自己,关闭其他已展开的菜单

3、优点:js代码量少,实现易于理解

废话不多说,看代码

HTML示例  (菜单代码,便于复制,就不加行号了)

<li class="nav-parent">
     <a href="#"><span>系统设置</span></a>
     <ul class="children">
          <li><a href="#">邮件配置</a></li>
          <li><a href="#">文件存储配置</a></li>
         <li><a href="#">选项</a></li>
     </ul>
</li>
<li class="nav-parent">
     <a href="#"><span>系统设置</span></a>
     <ul class="children">
          <li><a href="#">邮件配置</a></li>
          <li><a href="#">文件存储配置</a></li>
         <li><a href="#">选项</a></li>
     </ul>
</li>
<li class="nav-parent">
     <a href="#"><span>系统设置</span></a>
     <ul class="children">
          <li><a href="#">邮件配置</a></li>
          <li><a href="#">文件存储配置</a></li>
         <li><a href="#">选项</a></li>
     </ul>
</li>

JS示例  (这里是用jquery实现的,代码行数少)

 

var $container = $('.children'),
$trigger = $('.nav-parent');  // 分别获取所有的“父子”
$container.hide();// 隐藏所有的“子”
$trigger.first().find('.children').show();// 显示第一个“父”的子(展开第一个)      
$trigger.on('click', function(e) {// 当“父”发生点击事件
  if( $(this).find('.children').is(':hidden') ) {
     $trigger.find('.children').hide(300);// 关闭其他
     $(this).find('.children').show(300);// 显示自己
  }
  e.preventDefault();
}); 

 

 同样的原理,也可以把“find()”改成“next()”,实现对兄弟节点的控制,这里主要是体现在文字块、图片块的展示上面

 

转载于:https://www.cnblogs.com/cytyk/p/6019666.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你使用的是 layui 的下拉菜单组件,你可以设置其 `accordion` 属性为 `true`,这样每次只能展开一个下拉菜单,其他的下拉菜单会自动关闭。 示例如下: ```html <div class="layui-nav"> <ul class="layui-nav-bar"> <li class="layui-nav-item"><a href="/">首页</a></li> <li class="layui-nav-item layui-nav-itemed" accordion="true"> <a href="javascript:;">产品</a> <dl class="layui-nav-child"> <dd><a href="/product/list">产品列表</a></dd> <dd><a href="/product/detail">产品详情</a></dd> </dl> </li> <li class="layui-nav-item"><a href="#">关于</a></li> <li class="layui-nav-item"><a href="#">联系我们</a></li> </ul> </div> ``` 在上面的代码中,我们将第二个菜单项的 `accordion` 属性设置为 `true`,表示每次只能展开一个下拉菜单。 如果你想自定义只展开一个下拉菜单的实现方式,可以使用 JavaScript 代码来监听下拉菜单的点事件,在点时将其他下拉菜单关闭。下面是一个示例代码: ```html <div class="layui-nav" id="nav"> <ul class="layui-nav-bar"> <li class="layui-nav-item"><a href="/">首页</a></li> <li class="layui-nav-item"> <a href="javascript:;">产品</a> <dl class="layui-nav-child"> <dd><a href="/product/list">产品列表</a></dd> <dd><a href="/product/detail">产品详情</a></dd> </dl> </li> <li class="layui-nav-item"><a href="#">关于</a></li> <li class="layui-nav-item"><a href="#">联系我们</a></li> </ul> </div> <script> layui.use(['jquery', 'element'], function() { var $ = layui.jquery, element = layui.element; $('#nav .layui-nav-item').on('click', function() { var $item = $(this); if (!$item.hasClass('layui-nav-itemed')) { // 关闭其他展开的下拉菜单 $('#nav .layui-nav-item.layui-nav-itemed').removeClass('layui-nav-itemed'); } }); }); </script> ``` 在上面的代码中,我们使用 jQuery 监听了 `#nav .layui-nav-item` 元素的点事件,当点时判断当前是否为展开的下拉菜单,如果不是,则关闭其他已经展开的下拉菜单

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值