I have an animate sidebar which appears when user clicks on a hamburger button. Here is the structure :
JavaScript
x
12
12
1
$('#nav-toggle').click(function() {
2
if($('#nav-toggle').hasClass('active')){
3
$('.menu').animate({
4
right: "0px"
5
}, 200);
6
}else{
7
$('.menu').animate({
8
right: "-285px"
9
}, 200);
10
}
11
12
});
JavaScript
1
26
26
1
.menu{
2
right:-285px;
3
height:100%;
4
position: fixed;
5
width: 285px;
6
z-index: 1;
7
background-color: #111111;
8
}
9
.menu ul {
10
border-top: 1px solid #636366;
11
list-style: none;
12
margin: 0;
13
padding: 0;
14
}
15
16
.menu li {
17
border-bottom: 1px solid #636366;
18
font-family: 'Open Sans', sans-serif;
19
line-height: 45px;
20
padding-bottom: 3px;
21
padding-left: 20px;
22
padding-top: 3px;
23
}
24
.menu li a{
25
color:white;
26
}
JavaScript
1
9
1
<div class="menu">
2
<!-- Menu -->
3
<ul>
4
<li><a href="#">About</a></li>
5
<li><a href="#">Blog</a></li>
6
<li><a href="#">Help</a></li>
7
<li><a href="#">Contact</a></li>
8
</ul>
9
</div>
Actually we can open menu by clicking on #nav-toggle
element and close it by clicking on this element too. I’d like to allow user to close this menu by clicking anywhere in the page.
How can I do do that? I tried with e.preventDefault();
in my if statement but it doesn’t work.
Thanks!
Advertisement
Answer
I suggest to use toggleClass method and animate it by adding transition: .2s
to your .menu
,
working example:
JavaScript
1
9
1
$('#nav-toggle').click(function(e) {
2
e.stopPropagation();
3
$(".menu").toggleClass('bar')
4
});
5
$('body').click(function(e) {
6
if ($('.menu').hasClass('bar')) {
7
$(".menu").toggleClass('bar')
8
}
9
})
JavaScript
1
39
39
1
.menu {
2
right: -285px;
3
height: 100%;
4
position: fixed;
5
width: 285px;
6
z-index: 1;
7
background-color: #111111;
8
transition: .2s
9
}
10
11
.menu ul {
12
border-top: 1px solid #636366;
13
list-style: none;
14
margin: 0;
15
padding: 0;
16
}
17
18
.menu li {
19
border-bottom: 1px solid #636366;
20
font-family: 'Open Sans', sans-serif;
21
line-height: 45px;
22
padding-bottom: 3px;
23
padding-left: 20px;
24
padding-top: 3px;
25
}
26
27
.menu li a {
28
color: white;
29
}
30
31
.bar {
32
right: 0px;
33
}
34
35
body,
36
html {
37
height: 100%;
38
width: 100%;
39
}
JavaScript
1
11
11
1
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
2
<button id="nav-toggle">Click me</button>
3
<div class="menu">
4
<!-- Menu -->
5
<ul>
6
<li><a href="#">About</a></li>
7
<li><a href="#">Blog</a></li>
8
<li><a href="#">Help</a></li>
9
<li><a href="#">Contact</a></li>
10
</ul>
11
</div>