slideDown菜单-添加更多级别的问题
slideDown Menu - Issue adding more levels
我有这个菜单正在处理…
最初,"二级"将出现在"一级"之下。我一直能把它移到第二列,一直坚持到顶部。据我所见,它在起作用!
我遇到的问题是添加更多的列,因为我至少需要另一个级别,可能是两个级别。
我想我已经处理了HTML部分(参见项目2-项目2-1-项目2-1-1),现在的问题是脚本。我试着复制当前的,但就是无法使其工作。。。
如有任何帮助,我们将不胜感激。感谢
Fiddle
HTML:
<div class="wrapper">
<ul>
<li class="level-1"><a href="#">Item 1</a>
<ul class="level-2">
<li><a href="#">Item 1-1</a></li>
<li><a href="#">Item 1-2</a></li>
</ul>
</li>
<li class="level-1"><a href="#">Item 2</a>
<ul class="level-2">
<li><a href="#">Item 2-1</a>
<ul class="level-3">
<li><a href="#">Item 2-1-1</a></li>
</ul>
</li>
</ul>
</li>
<li class="level-1"><a href="#">Item 3</a>
<ul class="level-2">
<li><a href="#">Item 3-1</a></li>
<li><a href="#">Item 3-2</a></li>
<li><a href="#">Item 3-3</a></li>
</ul>
</li>
<li class="level-1"><a href="#">Item 4</a>
<ul class="level-2">
<li><a href="#">Item 4-1</a></li>
<li><a href="#">Item 4-2</a></li>
</ul>
</li>
</ul>
</div>
JS:
$('.level-2').hide();
$('.level-1').on('click', function(){
if(!($(this).children('.level-2').is(':visible'))){
$('.level-2').slideUp();
$(this).children('.level-2').slideDown();
} else {
$('.level-2').slideUp();
}
});
$('.level-2').on('click', function(e){
e.stopPropagation();
});
CSS:
body{
margin: 0px;
border: 0;
overflow: hidden;
}
ul {
list-style: none;
margin: 0;
padding: 0;
color: #000000;
}
ul li {
position: relative;
}
li ul {
position: absolute;
left: 120px;
top: 0;
display: none;
}
ul li a {
text-decoration: none;
color: #000000;
}
.level-1 {
position: relative;
top: 20px;
left: 20px;
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
font-weight: normal;
line-height: 15px;
letter-spacing: 0em;
text-transform: uppercase;
}
.level-2 {
position: fixed;
top: 20px;
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
font-weight: normal;
line-height: 15px;
letter-spacing: 0em;
text-transform: uppercase;
}
.level-3 {
position: fixed;
top: 20px;
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
font-weight: normal;
line-height: 15px;
letter-spacing: 0em;
text-transform: uppercase;
}
我已经更新了CSS,请尝试一下。它会帮助你的。
body{
margin: 0px;
border: 0;
overflow: hidden;
}
ul {
list-style: none;
margin: 0;
padding: 0;
color: #000000;
}
ul li {
position: relative;
}
li ul {
position: absolute;
left: 120px;
top: 0px;
display: none;
}
ul li a {
text-decoration: none;
color: #000000;
}
.level-1 {
position: relative;
top: 20px;
left: 20px;
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
font-weight: normal;
line-height: 15px;
letter-spacing: 0em;
text-transform: uppercase;
background:#f5f5f5;
width:220px;
}
.level-2, .level-3 {
top: 20px;
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
font-weight: normal;
line-height: 15px;
letter-spacing: 0em;
text-transform: uppercase;
}
.level-1 > .level-2, .level-1 .level-2 > .level-3{position:absolute; right:10px; top:0px; left:220px; width:220px; background:#f8f8f8;}
感谢
通过你的小提琴,我可以看到两个问题:
- 您正在JS中检查
:visible
,但CSS正在li ul
规则上设置display:none
- 当可见时,第三个菜单级别将出现在第二个级别的下面(这更像是一个UX/设计问题,而不是JS的问题)
第二个问题很容易通过一些CSS来解决,例如:
.level-3 { left: 200px; }
我认为,第一个问题是因为您在CSS中使用"display"将元素设置为隐藏,但试图在JS检查:visible
而不是display
规则的值时切换它。这个stackoverflow的答案解释了为什么这可能会导致问题,可能比我更好,但我认为问题是JS找不到用CSS设置为display:none
的对象。
我创建了一个fiddle,它给出了一个例子,说明如何通过替换JS:中的这一行来避免这个问题
if(!($(this).children('.level-2').is(':visible'))){
这个:
if($('.level-3').css('display') === 'none'){
(我保留了单击.level-1
的逻辑,但为了便于比较,更改了单击.level-2
的逻辑。)
在我的例子中,我还为不同的列表项目添加了彩色背景,以提高可见性——这样可以更容易地看到项目是否以这种方式出现在一起。我希望这些能有所帮助!
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 将PHP变量传递给jQuery时遇到问题
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 参数变量出现ngTable指令问题
- 剑道网格jQuery动画()问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- 多级HTML表单
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- TableExport jquery插件:文件名和扩展名问题
- JavaScript Pub/Sub属性访问问题
- JavaScript异步问题
- 如何解决Yii中的页面刷新问题
- Safari(Mac OS)上的jQuery平滑滚动问题
- jqGrid树网格问题
- 使用正则表达式评估电子邮件地址时出现性能问题
- slideDown菜单-添加更多级别的问题
- 常见问题解答的多级菜单
- 多级可折叠引导侧导航菜单出现问题
- 多级下拉菜单有切换问题
- IE8中的多级弹出菜单出现问题