[英]Why does my onclick hamburger button stop working after event?
我是编码新手,不知道自己在做什么。 但是我设法做出了一些很酷的东西,但我不能重复这种酷。
我正在做我的移动设计,我在你点击汉堡的地方做了它,sidenav 打开,当你点击侧边栏的右边时,侧边栏关闭。 很酷。
问题是现在我的 onclick 汉堡包按钮在运行事件后似乎无法点击。 请帮我。 我究竟做错了什么? 我怎样才能让我的汉堡有无限的功能点击事件? 谢谢。
查看我的 JS FIDDLE: http://jsfiddle.net/r214g0oc/1/
<header id="navbar">
<div >
<img src="img/Logo.jpg" alt="logo" class="hmainlogo"/>
<button class="openbtn" onclick="openNav()">☰</button>
</div>
<div id="main">
<div id="mySidebar" class="sidebar">
<img src="img/Logo.jpg" alt="logo" class="hsblogo"/>
<ul>
<li><a href="index.php">Home</a></li>
<li><a href="about.php">About</a></li>
<li><a href="services.php">Services</a></li>
<li><a href="rates.php">Rates</a></li>
<li><a href="reviews.php">Reviews</a></li>
</ul>
<a href="freeconsult.php" id="hfreeconsult">Free Consult</a>
</div>
</div>
</header>
function openNav() {
document.getElementById("mySidebar").style.width = "150px";
document.getElementById("main").style.marginLeft = "150px";
}
function handleMousePos(event) {
var mouseClickWidth = event.clientX;
if (mouseClickWidth >= 150) {
document.getElementById("mySidebar").style.left = '-150px';
}
}
document.addEventListener("click", handleMousePos);
该代码每次都有效,但它只是按照您的指示执行(所有计算机编程的祸根)。
你是说如果用户点击 150px 标记右边的地方,它应该将侧边栏移动到 -150px(屏幕外)。 再次单击...将侧边栏移动到 -150px:换句话说,它不会移动它。
如果你想要的是一个切换,你需要检查侧边栏现在在哪里,如果它已经在屏幕外,把它移回屏幕上。
if (document.getElementById("mySidebar").style.left == '-150px') document.getElementById("mySidebar").style.left =0;
这是非常笨拙的编码风格,不过/更好的方法是使用 CSS,并定义两个 styles:一个用于侧边栏,一个没有,然后检查应用了哪种样式,并使用 addStyle 和 removeStyle 切换 styles。
再见,你的问题出在handleMousePos
上。 如果mouseClickWidth >= 150
,则将-150px
分配给mySidebar
样式。 好的,但是您忘记了将0px
重新分配给您的mySidebar
的else
语句。
所以你的代码变成:
function handleMousePos(event) {
var mouseClickWidth = event.clientX;
if (mouseClickWidth >= 150) {
document.getElementById("mySidebar").style.left = '-150px';
}
else {
document.getElementById("mySidebar").style.left = '0px';
}
}
此处您的代码已修改。
您的handleMousePos(event)
可能是这里有问题的 function。 添加后,您不会删除 -150px。 所以我最好的建议是这样修改它:
function openNav() {
document.getElementById("mySidebar").style.left = '0px';
document.getElementById("mySidebar").style.width = "150px";
document.getElementById("main").style.marginLeft = "150px";
}
更好的方法仍然是为它使用 CSS 并添加和删除一个特定的属性,如 class 名称,其样式已经定义。
或者您可以选择使用隐藏的复选框并将您的汉堡菜单设为 label。 这将使 CSS 端更容易,因为您只需添加:选中并定义扩展的侧边栏属性
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.