如何使屏幕上的任意位置单击关闭由jQuery toggle()函数控制的移动菜单
How to make a click anywhere on the screen close mobile menu that is controlled by jQuery toggle() function?
我的移动菜单由jQuery toggle()
函数打开/关闭。除了能够通过再次单击用于打开它的相同汉堡图标来关闭它之外,我还希望能够通过在打开时单击屏幕上的任意位置来关闭它。但是,单击屏幕上的任意位置会通过以下方式"干扰"toggle()
功能:菜单打开后,如果我通过单击屏幕上的任意位置将其关闭,然后再次单击移动菜单图标将其打开,它仅在我第二次单击它时起作用(因为toggle()
功能没有"知道"我通过单击屏幕关闭了菜单)。
如何解决这个问题?
.JS:
$( '.header__menu_icon' ).toggle( function() {
$( '.wrap' ).removeClass( 'mobile_menu_opening mobile_menu_closing' );
$( '.wrap' ).addClass( 'mobile_menu_opening' );
}, function() {
$( '.wrap' ).removeClass( 'mobile_menu_opening mobile_menu_closing' );
$( '.wrap' ).addClass( 'mobile_menu_closing' );
});
$( document ).click(function() {
$( '.wrap' ).removeClass( 'mobile_menu_opening mobile_menu_closing' );
$( '.wrap' ).addClass( 'mobile_menu_closing' );
});
$( '.mobile_menu' ).click(function(event) {
event.stopPropagation();
});
.HTML:
<body>
<div class='wrap'>
<div class='header'>
<div class='mobile_menu'>
...
</div>
</div>
</div>
</body>
.CSS:
@keyframes mobile_menu_opening {
0% { transform: translateX(0px); }
100% { transform: translateX(-280px); }
}
@keyframes mobile_menu_closing {
0% { transform: translateX(-280px); }
100% { transform: translateX(0px); }
}
.mobile_menu_opening {
animation-name: mobile_menu_opening;
animation-duration: 2s;
}
.mobile_menu_closing {
animation-name: mobile_menu_closing;
animation-duration: 1s;
}
.wrap {
position: relative;
}
我会通过简单地避免切换功能来实现这一点。此外,您的代码可以通过以下方式进行优化:
function menuToggle() {
var openClass = 'mobile_menu_opening';
var closedClass = 'mobile_menu_closing';
var $wrap = $('.wrap');
if ($wrap.hasClass(openClass)) {
$wrap.removeClass(openClass);
$wrap.addClass(closedClass);
} else {
$wrap.removeClass(closedClass);
$wrap.addClass(openClass);
}
}
$('.header__menu_icon').on('click', function() {
menuToggle();
});
$(document).on('click', function() {
menuToggle();
});
$('.mobile_menu').on('click', function(event) {
event.stopPropagation();
});
使用 NOT 说明符
$( "body:not(.mobile_menu)" ).click(function() {
$("").removeClass("");
- or -
$("").toggle("");
});
相关文章:
- jQuery/Javascript.toggleClass/.classList.toggle的特殊行为
- 如何分解jQuery"toggle”;函数转换为separate“;显示“;以及“;隐藏“;功能
- Jquery cookie - toggle box
- JQuery Toggle()
- jQuery Toggle不适用于本地和我的网站,但适用于jsFiddle
- Like Unlike toggle button with jQuery's AJAX
- jQuery toggle()函数工作不正常
- jQuery Toggle——我做错了什么
- jQuery,在toggle()中重置表单值
- 使用jquery在toggle上添加和删除css图像类
- Jquery toggle()函数不适用于hoverwords()Sliding Letters扩展
- 为什么 jquery toggle() 方法在页面不刷新的情况下无法正常工作
- Jquery toggleClass toggle的类,但不会多次运行动画
- 将 .toggle() 添加到 jQuery
- jQuery.toggle - 在交替单击时执行两个或多个处理程序
- 如何让 toggle() 方法停止重复?jQuery.
- 在 JQuery 中反向 .toggle()
- 在自定义聚合物元素中使用 jquery toggle()
- jQuery Multiple Toggle
- JQuery toggle() 方法不影响其他重复元素