我想制作一个可展开的菜单,包含三个或更多项目。当其中一个项目被点击时,它会展开以显示<ul>
,它下面是display: hidden
。
此外,我希望它的工作方式是,如果该菜单上的某个项目已经展开,如果我点击任何其他项目,它将在展开第二个项目之前收回第一个项目的内容(点击一个)。有没有更简单的方法来使这个可扩展的菜单?
我有的代码是this。我必须为我在那里的三个项目中的每一个定义不同的toggle
函数,另外还有一个额外的switchAll
函数用于在继续扩展新项目之前隐藏任何扩展项目。
但是,该解决方案似乎并不是最好的。
没有更好的方法来定义一个可以处理所有三个项目的函数吗?为此,我需要它来获取哪些项目被点击之前,以便它可以了解哪些是扩展与否,以及采取什么行动相应。
我猜这可能只有两个功能,但我似乎无法弄清楚如何做到这一点。
另外,我想用Javascript实现这一点,而不是jQuery。
相关的代码如下:
HTML:
<ul>
<li><a href="#" onclick="toggle();">one</a>
<ul id="menu">
<li>sacd</li>
<li>safsdf</li>
</ul>
</li>
<li><a href="#" onclick="toggle1();">two</a>
<ul id="menu2">
<li>jlkfd</li>
<li>ljsdf</li>
</ul>
</li>
<li><a href="#" onclick="toggle2();">three</a>
<ul id="menu3">
<li>sfsdvbg gb</li>
<li>asdavffds</li>
</ul>
</li>
</ul>
CSS:
#menu {
display: none;
}
#menu2 {
display : none;
}
#menu3 {
display : none;
}
JS:
var hidden = true;
var hidden2 = true;
var hidden3 = true;
function switchAll(other1, other2) {
other1.style.display = "none";
other2.style.display = "none";
hidden = true;
hidden2 = true;
hidden3 = true;
};
function toggle() {
var menu = document.getElementById("menu");
var menu2 = document.getElementById("menu2");
var menu3 = document.getElementById("menu3");
if(hidden) {
switchAll(menu2, menu3);
menu.style.display = "block";
hidden = false;
} else {
menu.style.display = "none";
hidden = true;
};
};
function toggle1() {
var menu = document.getElementById("menu");
var menu2 = document.getElementById("menu2");
var menu3 = document.getElementById("menu3");
if(hidden2) {
switchAll(menu, menu3);
menu2.style.display = "block";
hidden2 = false;
} else {
menu2.style.display = "none";
hidden2 = true;
};
};
function toggle2() {
var menu = document.getElementById("menu");
var menu2 = document.getElementById("menu2");
var menu3 = document.getElementById("menu3");
if(hidden3) {
switchAll(menu, menu2);
menu3.style.display = "block";
hidden3 = false;
} else {
menu3.style.display = "none";
hidden3 = true;
};
};
请问您可以发布相关代码 – caramba
缩进无法正确显示在这里,但在JSFiddle他们很好。我似乎无法在这里正确格式化它。 – JNat
你为什么不使用accordeon插件?为什么重新发明轮子?是否真的需要定制实现? – arieljuod