gpt4 book ai didi

javascript - 单击时侧边栏菜单不会折叠

转载 作者:行者123 更新时间:2023-12-01 01:20:56 25 4
gpt4 key购买 nike

当用户单击左侧的垂直黑色边框时,侧边栏菜单会显示,但当我单击关闭按钮时,侧边栏菜单不会折叠。我希望它使用 javascript 或 jquery 以相同的动画结束。

<div id="mySidenav" class="sidenav" onclick="openNav()" style="cursor: pointer;">
<a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a>
<a href="#">About</a>
<a href="#">Services</a>
<a href="#">Clients</a>
<a href="#">Contact</a>
</div>

<h2>Animated Sidenav</h2>

<script>
function openNav() {
document.getElementById("mySidenav").style.width = "250px";
}

function closeNav() {
document.getElementById("mySidenav").style.width = "0";
}
</script>

演示 https://jsfiddle.net/1n6bajmh/

最佳答案

它不起作用,因为您在嵌套元素上注册了两个 onclick 事件处理程序。

当你点击内部的a元素来关闭菜单时,closeNav函数确实被正确调用,但随后点击事件在DOM树中向上传播,到达id为“mySidenav”的父id。

现在,div 还具有一个已注册的 onclick 处理程序,该处理程序也会被触发,因此您的 openNav 函数也会被调用。

您需要防止事件向上传播并到达 div,因此您可以使用 event.stopPropagation()。

看看这个:

function openNav() {
document.getElementById("mySidenav").style.width = "250px";
}

function closeNav(event) {
event.stopPropagation();
document.getElementById("mySidenav").style.width = "0";
}
body {
font-family: "Lato", sans-serif;
}

.sidenav {
height: 100%;
width: 15px;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: #111;
overflow-x: hidden;
transition: 0.5s;
padding-top: 60px;
}

.sidenav a {
padding: 8px 8px 8px 32px;
text-decoration: none;
font-size: 25px;
color: #818181;
display: block;
transition: 0.3s;
}

.sidenav a:hover {
color: #f1f1f1;
}

.sidenav .closebtn {
position: absolute;
top: 0;
right: 25px;
font-size: 36px;
margin-left: 50px;
}

@media screen and (max-height: 450px) {
.sidenav {
padding-top: 15px;
}
.sidenav a {
font-size: 18px;
}
}
<meta name="viewport" content="width=device-width, initial-scale=1">
<div id="mySidenav" class="sidenav" onclick="openNav()" style="cursor: pointer;">
<a href="javascript:void(0)" class="closebtn" onclick="closeNav(event)">&times;</a>
<a href="#">About</a>
<a href="#">Services</a>
<a href="#">Clients</a>
<a href="#">Contact</a>
</div>

<h2>Animated Sidenav</h2>

我建议您在这里阅读有关事件冒泡的更多信息: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events

关于javascript - 单击时侧边栏菜单不会折叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54241020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com