【发布时间】:2017-01-17 10:27:13
【问题描述】:
我希望调整一个画布菜单以在用户单击菜单外的任何位置时关闭。我正在使用下面链接中的菜单,它应用了一个“.offcanvas-expanded”类,通过 CSS 转换将菜单带入视口。就目前而言,菜单只能通过单击“.offcanvas-toggle”按钮来打开/关闭。
菜单:http://slicejack.com/responsive-offcanvas-navigation-menu/
我希望能够在用户单击页面上的任何位置而不使用菜单时切换此类。我已经尝试使用以下脚本(不成功),这导致整个页面成为 css 转换的触发器。
https://jsfiddle.net/graemebryson/onz7xspq/
jQuery(function( $ ){
$('.offcanvas-toggle').on('click', function() {
$('body').toggleClass('offcanvas-expanded');
});
$(document).click (function (e) {
if ( (e.target != $('.offcanvas')[0] ) && ( $('body').hasClass('offcanvas-expanded')) ) {
$('body').toggleClass('offcanvas-expanded');
}
});
});
有人可以就我如何实现这一点提供一些建议吗?
更新——通过下面的@Joffutt 给出完整答案:
https://jsfiddle.net/graemebryson/97zdfwvf/
$(document).ready(function() {
$('.offcanvas-toggle').on('click', function() {
$('body').toggleClass('offcanvas-expanded');
});
});
$(document).click(function(e) {
if ((e.target != $('.offcanvas')[0]) && (e.target != $('.offcanvas-toggle')[0]) && ($('body').hasClass('offcanvas-expanded'))) {
var li_tags = $($('.offcanvas')[0]).find('li');
var a_tags = $($('.offcanvas')[0]).find('a');
for (var i = 0; i < li_tags.length; i++) {
if (e.target == li_tags[i] || e.target == a_tags[i]) {
return;
}
}
$('body').toggleClass('offcanvas-expanded');
}
});
【问题讨论】:
-
谢谢@Goku - 我已经调整了这个答案以适应,但切换按钮不再触发菜单的启动。我已经更新了上面的代码以显示我目前拥有的内容。
-
嘿@GraemeBryson 你能在https://jsfiddle.net/ 上创建你的示例代码吗,我帮你会更容易。
-
当然,谢谢@Goku - 在这里可用:jsfiddle.net/graemebryson/onz7xspq
-
嘿@GraemeBryson 你现在可以检查你的例子https://jsfiddle.net/onz7xspq/2/。我更新了,如果你可以检查它,请告诉我。但是还有其他问题,如果你点击一些菜单链接它会关闭菜单...考虑一下...
标签: javascript jquery css