作为一个初学者,即使是看似最简单的事情,我也无所适从,但也许我的目标太高了,仅几周前才开始学习。 我试图仅坚持HTML,CSS和原始Javascript,这样一来,我就不必在基础知识的基础上开始学习其他框架的语法。 我试图从我在w3,这里等中学到的解决方案摘要拼凑在一起,但是,我并不假装不完全了解我正在阅读和使用的内容。
我需要一个简单的垂直菜单,如下所示。当前,并且可能只有一次,主菜单中的一项(“投资组合”)将具有子菜单项。子菜单的外观和功能取决于窗口的宽度:
但是,有一些我无法弄清的“错误”。
我提供了我拥有的代码,并且将其放在一个文档中,而不是单独的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 changes
body {
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>
答案 0 :(得分:1)
submenuId
的eventListener,但没有删除“ submenu_class” resetSubmenus()
功能。您可以通过右侧的Chrome Devtool“元素->事件监听器”检查将哪些事件监听器附加到元素上