作为一个初学者,我对看似最简单的事情也没有深入的研究,但也许我的目标太高了,仅仅几周前我才刚开始学习。我只想坚持HTML、CSS和普通Javascript,这样我就不必在基础知识的基础上学习其他框架的语法了。我试着从w3学到的东西中拼凑出一些解决方案,但是,我并不假装完全理解我正在阅读和使用的内容。
我需要一个简单的,垂直菜单,如下所示。目前,而且很可能只有一个项目(“投资组合”)在主菜单中将有子菜单项。子菜单的外观和功能取决于窗口的宽度:
然而,有一些‘bug’,我就是搞不懂。
我提供了我的代码,我把它放在一个文档中,而不是单独的CSS和Javascript。(我希望我已经正确地格式化了代码。)
function openSubmenu() {
this.setAttribute('class', 'submenu_class showSubmenu');
document.getElementById("submenuID").textContent = "Portfolio ▲";
this.onclick = resetSubmenus;
}
function resetSubmenus() {
var submenuElements = document.getElementsByClassName('submenu_class');
for (var i = 0; i < submenuElements.length; i++) {
submenuElements[i].setAttribute('class', 'submenu_class');
submenuElements[i].onclick = openSubmenu;
document.getElementById("submenuID").textContent = "Portfolio ▼";
}
}
function screenWidthFunction(x) {
if (x.matches) { //if it's a narrow screen
document.getElementById("submenuID").textContent = "Portfolio ▼";
document.getElementById("submenuID").addEventListener("click", openSubmenu);
} else {
document.getElementById("submenuID").textContent = "Portfolio ►";
document.getElementById("submenuID").removeEventListener("click", openSubmenu);
}
}
var x = window.matchMedia("(max-width: 480px)")
screenWidthFunction(x) // Call listener function at run time
x.addListener(screenWidthFunction) // Attach listener function on state changesbody {
background-color: black;
}
nav ul {
position: relative;
text-align: left;
}
nav ul li {
display: block;
/* WHAT???? REMOVING THIS ACTUALLY MAKES TEXT-DECORATIONS REAPPEAR.... WHY???*/
}
nav a {
text-decoration: none;
}
/* Hide dropdowns by default */
nav ul ul {
position: relative;
display: none;
left: 0;
}
/* Display Dropdowns on Click */
nav ul li.showSubmenu>ul {
display: block;
position: relative;
width: 30%;
}
.menu a {
text-decoration-style: none;
text-decoration: none;
background-color: black;
color: white;
}
.menu a:hover {
background-color: white;
color: black;
}<nav class="menu">
<ul>
<li class="menuItem"><a href="#">Home</a></li>
<li class="menuItem"><a href="#">About</a></li>
<li class="submenu_class"><a href="#"><span id="submenuID">Portfolio ▼</span></a>
<ul>
<li><a href="#">Landscape</a></li>
<li><a href="#">Architecture</a></li>
<li><a href="#">Animal</a></li>
<li><a href="#">Other</a></li>
</ul>
</li>
<li class="menuItem"><a href="#">Information</a></li>
<li class="menuItem"><a href="#">Contact</a></li>
</ul>
</nav>
发布于 2018-08-18 17:55:19
submenuId,但没有删除“submenu_class”resetSubmenus()函数。您可以通过右侧的Chrome "element ->事件监听器“检查将哪些事件侦听器附加到元素上。https://stackoverflow.com/questions/51910008
复制相似问题