[英]Menu with dropdown
I need this menu to have more than one Menu ex: "Item 2". 我需要此菜单具有多个菜单,例如:“项目2”。
Once "Item 2" opens the "Item 1" closes. 一旦“项目2”打开,“项目1”将关闭。
All the rest should work as it works now. 所有其余部分都应该按现在的方式工作。
arrow rotates 箭头旋转
menu stay open if user clicks in the website or sub menus 如果用户单击网站或子菜单,则菜单保持打开状态
etc 等等
HTML: HTML:
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-
awesome/4.3.0/css/font-awesome.min.css">
<div id="container">
Item 1<i id="icon" class="fa fa-arrow-down"></i>
</div>
<ul id="test" class="hide">
<li>sub item 1</li>
<li>sub item 2</li>
</ul>
CSS: CSS:
.fa-arrow-down{
transform: rotate(-90deg);
transition: transform 1s linear;
}
.fa-arrow-down.open{
transform: rotate(0deg);
transition: transform 1s linear;
}
.hide {
display:none;
}
.show {
display: inline;
}
JS: JS:
(function(document) {
var div = document.getElementById('container');
var icon = document.getElementById('icon');
var test = document.getElementById('test');
var open = false;
div.addEventListener('click', function() {
if (open) {
icon.className = 'fa fa-arrow-down';
test.className = 'hide';
} else {
icon.className = 'fa fa-arrow-down open';
test.className = 'show';
}
open = !open;
});
})(document);
please find working solution at following JS Bin Link 请在以下JS Bin Link中找到有效的解决方案
https://jsbin.com/jedulux/1/edit?html,css,js,output https://jsbin.com/jedulux/1/edit?html,css,js,输出
I have added JQuery for handling toggling 我已经添加了用于处理切换的JQuery
$('#container').on('click', 'ul li', function() {
$(this).find('ul').toggle()
$(this).find('i').toggleClass('open')
});
Modified HTML 修改后的HTML
<div id="container" style="display:inline-block">
<ul id="items">
<li>
Item 1 <i id="icon" class="fa fa-arrow-down"></i>
<ul style="display:none">
<li>Sub Item 1</li>
<li>Sub Item 2</li>
</ul>
</li>
<li>
Item 2 <i id="icon" class="fa fa-arrow-down"></i>
<ul style="display:none">
<li>Sub Item 3</li>
<li>Sub Item 4</li>
</ul>
</li>
</ul>
</div>
Modified CSS 修改后的CSS
.fa-arrow-down{
transform: rotate(-90deg);
transition: transform 1s linear;
}
.fa-arrow-down.open{
transform: rotate(0deg);
transition: transform 1s linear;
}
.hide {
display:none;
}
.show {
display: block;
}
ul {
list-style-type: none;
padding: 0;
}
ul#items > li {
float: left
}
ul#items > li > ul {
position: absolute;
}
Please note that styling may be not what you have expected, but I guess you can style it as per your need. 请注意,样式可能不是您期望的,但是我想您可以根据需要对其进行样式设置。
Edited: 编辑:
JS Bin : https://jsbin.com/jedulux/edit?html,css,output JS Bin: https : //jsbin.com/jedulux/edit? html,css, output
JavaScript: JavaScript:
$('#container').on('click', 'ul li', function() {
var self = this;
$('#container > ul > li').each(function(index, item) {
if (item == self) {
$(item).find('ul').toggle()
$(this).find('i').toggleClass('open')
} else {
$(item).find('ul').hide()
$(this).find('i').removeClass('open')
}
})
});
Maybe this would solve your problem: 也许这可以解决您的问题:
HTML 的HTML
<div id="container">
Item 1<i id="icon" class="fa fa-arrow-down"></i>
</div>
<ul id="test" class="hide">
<li>
<div id="containers1">
Item 1-1<i id="icons1" class="fa fa-arrow-down"></i>
</div>
<ul id="tests1" class="hide">
<li>Item 1-1-1</li>
<li>Item 1-1-2</li>
</ul>
</li>
<li>
<div id="containers2">
Item 1-2<i id="icons2" class="fa fa-arrow-down"></i>
</div>
<ul id="tests2" class="hide">
<li>Item 1-1-1</li>
<li>Item 1-2-2</li>
</ul>
</li>
</ul>
You can of course use classes
and use parent element
and child element
selectors to further simplify it (I did not have enough Time for it.) 您当然可以使用classes
并使用parent element
和child element
选择器进一步简化它(我没有足够的时间来做)。
CSS 的CSS
.fa-arrow-down{
transform: rotate(-90deg);
transition: transform 1s linear;
}
.fa-arrow-down.open{
transform: rotate(0deg);
transition: transform 1s linear;
}
.hide {
display:none;
}
.show {
display: inline;
}
JavaScript (No jQuery) JavaScript (无jQuery)
(function(document){
var div = document.getElementById('container');
var icon = document.getElementById('icon');
var test = document.getElementById('test');
var open = false;
div.addEventListener('click', function(){
if(open){
icon.className = 'fa fa-arrow-down';
test.className = 'hide';
}
else{
icon.className = 'fa fa-arrow-down open';
test.className = 'show';
}
open = !open;
});
var divs1 = document.getElementById('containers1');
var icons1 = document.getElementById('icons1');
var tests1 = document.getElementById('tests1');
var opens1 = false;
divs1.addEventListener('click', function(){
if(opens1){
icons1.className = 'fa fa-arrow-down';
tests1.className = 'hide';
}
else{
icons1.className = 'fa fa-arrow-down open';
tests1.className = 'show';
}
opens1 = !opens1;
});
var divs2 = document.getElementById('containers2');
var icons2 = document.getElementById('icons2');
var tests2 = document.getElementById('tests2');
var opens2 = false;
divs2.addEventListener('click', function(){
if(opens2){
icons2.className = 'fa fa-arrow-down';
tests2.className = 'hide';
}
else{
icons2.className = 'fa fa-arrow-down open';
tests2.className = 'show';
}
opens2 = !opens2;
});
})(document);
Here is where using classes, etc. would have helped (like I made 3 separate functions, however, using classes would shorten to 1). 这是使用类等会有所帮助的地方(例如我制作了3个单独的函数,但是使用类会缩短为1)。
Include this 包括这个
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
No jquery, but I have written my own logic instead of yours; 没有jquery,但是我写了我自己的逻辑而不是你的逻辑;
Some issue with loading font-awesome.css; 加载font-awesome.css时出现一些问题; logic wise the code is solid; 在逻辑上,代码是可靠的;
Note: You may not feel the arrow movement in snippet; 注意:您可能不会感觉到片段中的箭头移动; copy into html and see it working. 复制到html并查看它是否有效。
Hope that's OK. 希望没事。
var icon = document.getElementById('icon'); var icon1 = document.getElementById('icon1'); var test = document.getElementById('test'); var test1 = document.getElementById('test1'); var secondMenuOpen = false; var firstMenuOpen = false; icon.onclick = function() { if(!firstMenuOpen) openFirstMenu(); else closeFirstMenu(); } icon1.onclick = function() { if(!secondMenuOpen) openSecondMenu(); else closeSecondMenu(); checkFirstMenu(); } function checkFirstMenu() { if(firstMenuOpen) closeFirstMenu(); } function closeFirstMenu() { icon.classList.remove('open'); test.classList.add('hide'); firstMenuOpen = false; } function openFirstMenu() { icon.classList.add('open'); test.classList.remove('hide'); firstMenuOpen = true; } function closeSecondMenu() { icon1.classList.remove('open'); test1.classList.add('hide'); secondMenuOpen = false; } function openSecondMenu() { icon1.classList.add('open'); test1.classList.remove('hide'); secondMenuOpen = true; }
.fa-arrow-down{ transform: rotate(-90deg); transition: transform 1s linear; } .fa-arrow-down.open{ transform: rotate(0deg); transition: transform 1s linear; } .hide { display:none; } .show { display: inline; }
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css"> <div id="container"> Item 1<i id="icon" class="fa fa-arrow-down"></i> </div> <ul id="test" class="hide"> <li>sub item 1</li> <li>sub item 2</li> </ul> <div id="container1"> Item 2<i id="icon1" class="fa fa-arrow-down"></i> </div> <ul id="test1" class="hide"> <li>sub item 1</li> <li>sub item 2</li> </ul>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.