我想製作一個可展開的菜單,包含三個或更多項目。當其中一個項目被點擊時,它會展開以顯示<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