javascript - 点击其他按钮打开/关闭移动菜单
问题描述
我正在努力为移动网站创建/完成类似菜单的应用程序。
单击导航中的按钮时,会显示一个菜单弹出窗口。当我再次单击同一个按钮时,它会很好地关闭。但是,当打开弹出窗口并单击导航栏中的另一个按钮时,两个菜单都相互重叠。
我正在努力使我的逻辑正确。由于切换课程不起作用。我正在为此努力,所以也许我错过了一些简单/愚蠢的事情。
我在这里创建了一个小提琴来更好地解释这个问题。
任何帮助表示赞赏。
$(function() {
var $body = $("body"),
$btn = $(".menuButton"),
$menu = $(".mobile-menu");
$btn.one('click', function() {
$body.append('<div class="mobile-menu-overlay" />');
});
$btn.on('click', function() {
$(this).siblings().removeClass('open');
var $open_menu = $(this).data('open');
$menu.find('.' + $open_menu).toggle()
if ($(this).hasClass('open')) {
$(this).removeClass('open')
$body.removeClass('mobile-open')
$(this).closest($menu).removeClass('open')
} else {
$(this).addClass('open')
$body.addClass('mobile-open')
$(this).closest($menu).addClass('open')
}
// $(this).siblings().removeClass('open');
// var $open_menu = $(this).data('open');
// $menu.find('.'+$open_menu).toggle()
// $(this).toggleClass('open')
// $body.addClass('mobile-open')
// $(this).closest($menu).addClass('open')
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="mobile-nav">
<ul>
<li class="search menuButton" data-open="search"><span>Search</span></li>
<li class="menu menuButton" data-open="nav"><span>Menu</span></li>
<li class="cart menuButton" data-open="cart"><span>Cart</span></li>
<li class="account menuButton" data-open="account"><span>Account</span></li>
</ul>
</div>
<div class="mobile-menu">
<div class="mobile-section top-section open">
<div class="section-content">
<div class="account" style="background:yellow">account content</div>
<div class="cart" style="background:blue">cart</div>
<div class="search" style="background:orange">search</div>
<ul class="nav" style="background:green">
<li class="has-children">
<a href="url" title="title">category-title
<span class="menu-icon" data-slide="forward">
<i class="fa fa-chevron-right"></i>
</span>
</a>
</li>
</ul>
</div>
</div>
</div>
解决方案
问题在这里:
$menu.find('.' + $open_menu).toggle()
当你切换一个菜单时,你应该关闭它的兄弟。
我建议使用类来处理这个问题,这样你就可以做这样的事情:
$menu.find('.'+$open_menu).addClass('menu_open').siblings().removeClass('menu_open');
推荐阅读
- python - 根据特定的行键条件在熊猫中插入一列
- c - 为什么输入函数不能跟随输出函数,反之亦然?
- javascript - 尝试保存对象/数组时出现 React JS 问题 - Canvas Signature Pad
- python - Python 3.x 的 CRC16
- python - 比较线性回归中 StandardScaler 与 Normalizer 的结果
- python - 对于数据框中的每个组,删除满足某些条件的行之后的行
- regex - BASH:如何在 sed 命令中对字符串使用 Regex Negative Lookahead?
- node.js - 用户注册 - MEAN 堆栈 - 错误:非法参数:未定义,字符串
- google-apps-script - 编辑触发器未运行
- php - Codeigniter 未处理 Instagram 身份验证重定向中的问号