移动导航点击出jquery
Mobile navigation click out jquery
我有一个功能,当用户点击移动导航的外部关闭移动菜单。我不认为我已经得到了正确的代码,因为当我点击移动菜单,它打开和关闭直接。我想要发生的是当用户在导航栏外点击时slideToggle菜单返回
当前代码为:
// Responsive menu
$('.mobile-menu').click(function(e) {
e.preventDefault();
$('nav').slideToggle('slow');
});
// Close out the menu on click outside
window.addEventListener('mouseup', function(event) {
var box = document.getElementById('nav');
if(event.target != box && event.target.parentNode != box) {
$('nav').slideToggle('slow');
}
});
我认为这是与mouseup有关的地方,但是我没有在可用的参数中看到鼠标点击。
谢谢
我可以给你一个更简洁的方法。窗口的监听器只应该在菜单展开后绑定。当它崩溃时,应该删除侦听器。这将避免由于异步执行两个事件侦听器而产生的许多麻烦和可能的错误。考虑到这一点:
// First we define a callback function to be called after the nav complete showing, which will close the nav when a user tap outside.
var bindEventListener = function(event) {
var box = document.getElementById('nav');
if(event.target != box && event.target.parentNode != box) {
$('nav').slideUp('slow', function(){
// remove the window's event listener after the nav is closed
window.removeEventListener('mouseup', bindEventListener);
});
}
});
// Now we set the button's onclick event and bind the above defined callback for mouseup event.
$('.mobile-menu').click(function(e) {
e.preventDefault();
$('nav').slideDown('slow', function(){
window.addEventListener('mouseup', bindEventListener);
});
});
点击事件的目标不一定是nav
或它的第一级子元素,所以如果nav
上有一个点击事件,你可以将其滑动打开,然后将其滑动关闭。
您需要检查nav
是否包含目标元素或等于它,因此在事件侦听器中,将您的条件更改为:
if(!(event.target == box || $.contains(box, event.target))) {
...
问题是,当您在.mobile-menu
上mousedown
时,它显示nav
,然后当您在nav
之外的任何mouseup
上,包括.mobile-menu
时,它再次隐藏nav
。您应该检查单击事件的目标也不是.mobile-menu
。试试下面的代码:
// Responsive menu
$('.mobile-menu').click(function(e) {
e.preventDefault();
$('nav').slideToggle('slow');
});
// Close out the menu on click outside
$(window).on('mouseup', function(event) {
if(!$(event.target).is("nav") && $.contains(event.target, $("nav")) && !$(event.target).is('.mobile-menu')) {
$('nav').slideToggle('slow');
}
});
相关文章:
- Jquery滑出菜单
- 调用JQuery弹出关闭按钮上的JS'X'
- 用我的函数jquery给出数据/参数
- Jquery弹出菜单未居中
- 如何在第一页加载时使jQuery弹出消息
- 成功后如何关闭jquery弹出框
- 与我的jquery弹出窗口和自动调整文本区域大小有冲突
- jQuery Slider在jQuery弹出窗口中只初始化一次
- 刷新jquery中弹出的ui对话框
- 动画Jquery弹出菜单
- jquery弹出注册窗口
- jQuery弹出框堆叠
- 需要使用 Jquery 挑出菜单下拉项
- 单击Jquery中弹出的事件
- Jquery 弹出框克隆丢失单击事件
- 单击按钮后打开JQuery弹出菜单
- 单击此图像/链接以激活 jquery 弹出窗口
- jQuery弹出窗口添加关闭功能,点击任何地方关闭弹出窗口
- 移动导航点击出jquery
- 使用jQuery替换出身体背景图像点击和随机加载