我已经实现了 hamburger.js
。当我尝试在移动设备上显示我的网站菜单时,关闭按钮不起作用。
这是我的网站:http://johnm.io/project/hamburgler/
示例:
function togglescroll() {
$('body').on('touchstart', function(e) {
if ($('body').hasClass('noscroll')) {
e.preventDefault();
}
});
}
$(document).ready(function() {
togglescroll()
$(".icon").click(function() {
$(".mobilenav").fadeToggle(500);
$(".top-menu").toggleClass("top-animate");
$("body").toggleClass("noscroll");
$(".mid-menu").toggleClass("mid-animate");
$(".bottom-menu").toggleClass("bottom-animate");
});
});
// PUSH ESC KEY TO EXIT
$(document).keydown(function(e) {
if (e.keyCode == 27) {
$(".mobilenav").fadeOut(500);
$(".top-menu").removeClass("top-animate");
$("body").removeClass("noscroll");
$(".mid-menu").removeClass("mid-animate");
$(".bottom-menu").removeClass("bottom-animate");
}
});
* {
font-family: 'helvetica nue', sans-serif;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-webkit-tap-highlight-color: transparent;
/* For some Androids */
}
.top-animate {
background: #fff !important;
top: 13px !important;
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
}
.mid-animate {
opacity: 0;
}
.bottom-animate {
background: #fff !important;
top: 13px !important;
-webkit-transform: rotate(-225deg);
transform: rotate(-225deg);
}
.top-menu {
top: 5px;
width: 25px;
height: 2px;
border-radius: 10px;
background-color: #F9A530;
}
.mid-menu {
top: 13px;
width: 25px;
height: 2px;
border-radius: 10px;
background-color: #F9A530;
}
.bottom-menu {
top: 21px;
width: 25px;
height: 2px;
border-radius: 10px;
background-color: #F9A530;
}
.menui {
background: orange;
transition: 0.6s ease;
transition-timing-function: cubic-bezier(.75, 0, .29, 1.01);
margin-top: 10px;
position: absolute;
}
.icon {
z-index: 999;
position: fixed;
display: block;
padding: 9px;
height: 32px;
width: 32px;
margin: 0px;
top: 0;
left: 0;
}
.mobilenav {
font-family: inherit;
top: 0;
left: 0;
z-index: 999;
display: none;
position: fixed;
width: 100%;
height: 100%;
background: orange;
}
.mobilenav li {
list-style-type: none;
text-align: center;
padding: 10px;
}
.mobilenav li a {
font-size: 150%;
color: #fff;
text-decoration: none;
font-weight: 300;
width: 100%;
}
.mobilenav li:first-child {
margin-top: 60px;
}
<div class="mobilenav">
<li><a href="#">Never</a>
</li>
<li><a href="#">Gonna</a>
</li>
<li><a href="#">Give</a>
</li>
<li><a href="#">You</a>
</li>
<li><a href="#">Up</a>
</li>
</div>
<a href="javascript:void(0)" class="icon">
<div class="hamburger">
<div class="menui top-menu"></div>
<div class="menui mid-menu"></div>
<div class="menui bottom-menu"></div>
</div>
</a>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
最佳答案
问题是 body
正在监听 touchstart
事件,如果他“拥有”类 noscroll
- 这发生在菜单时是开放的 - 他做..好吧..什么都不做,而不是做切换。
因此,我们要做的是检查按钮是否触发了 touchstart
事件。如果是这样,我们进行切换。
// HAMBURGLERv2
function togglescroll() {
$('body').on('touchstart', function(e) {
// Just add the check: !$(e.target).hasClass('icon')
if (!$(e.target).hasClass('icon') && $('body').hasClass('noscroll')) {
e.preventDefault();
}
});
}
$(document).ready(function() {
togglescroll()
$(".icon").click(function() {
$(".mobilenav").fadeToggle(500);
$(".top-menu").toggleClass("top-animate");
$("body").toggleClass("noscroll");
$(".mid-menu").toggleClass("mid-animate");
$(".bottom-menu").toggleClass("bottom-animate");
});
});
// PUSH ESC KEY TO EXIT
$(document).keydown(function(e) {
if (e.keyCode == 27) {
$(".mobilenav").fadeOut(500);
$(".top-menu").removeClass("top-animate");
$("body").removeClass("noscroll");
$(".mid-menu").removeClass("mid-animate");
$(".bottom-menu").removeClass("bottom-animate");
}
});
* {
font-family: 'helvetica nue', sans-serif;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-webkit-tap-highlight-color: transparent;
/* For some Androids */
}
.top-animate {
background: #fff !important;
top: 13px !important;
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
}
.mid-animate {
opacity: 0;
}
.bottom-animate {
background: #fff !important;
top: 13px !important;
-webkit-transform: rotate(-225deg);
transform: rotate(-225deg);
}
.top-menu {
top: 5px;
width: 25px;
height: 2px;
border-radius: 10px;
background-color: #F9A530;
}
.mid-menu {
top: 13px;
width: 25px;
height: 2px;
border-radius: 10px;
background-color: #F9A530;
}
.bottom-menu {
top: 21px;
width: 25px;
height: 2px;
border-radius: 10px;
background-color: #F9A530;
}
.menui {
background: orange;
transition: 0.6s ease;
transition-timing-function: cubic-bezier(.75, 0, .29, 1.01);
margin-top: 10px;
position: absolute;
}
.icon {
z-index: 999;
position: fixed;
display: block;
padding: 9px;
height: 32px;
width: 32px;
margin: 0px;
top: 0;
left: 0;
}
.mobilenav {
font-family: inherit;
top: 0;
left: 0;
z-index: 999;
display: none;
position: fixed;
width: 100%;
height: 100%;
background: orange;
}
.mobilenav li {
list-style-type: none;
text-align: center;
padding: 10px;
}
.mobilenav li a {
font-size: 150%;
color: #fff;
text-decoration: none;
font-weight: 300;
width: 100%;
}
.mobilenav li:first-child {
margin-top: 60px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="mobilenav">
<li><a href="#">Never</a></li>
<li><a href="#">Gonna</a></li>
<li><a href="#">Give</a></li>
<li><a href="#">You</a></li>
<li><a href="#">Up</a></li>
</div>
<a href="javascript:void(0)" class="icon">
<div class="hamburger">
<div class="menui top-menu"></div>
<div class="menui mid-menu"></div>
<div class="menui bottom-menu"></div>
</div>
</a>
我也用这里的代码修复了笔:http://codepen.io/anon/pen/gayZYG
关于javascript - Hamburgler.js 按钮在移动设备上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33856925/