首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >slideDown菜单-添加更多级别问题

slideDown菜单-添加更多级别问题
EN

Stack Overflow用户
提问于 2015-02-12 18:32:30
回答 2查看 80关注 0票数 0

我正在准备这个菜单...

最初,"level-2“将出现在"level-1”之下。我已经能够把它移到第二列,总是贴在顶部。据我所知,它正在工作!

我遇到的问题是添加更多的列,因为我至少需要另一个级别,可能是两个级别。

我想我已经处理好了HTML部分(参见第2项-第2-1项-第2-1-1项),现在问题是脚本。我试着复制当前的版本,但就是不能正常工作...

任何帮助都将不胜感激。谢谢

Fiddle

HTML:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
$('.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:

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

发布于 2015-02-12 19:01:48

我已经更新了CSS,请尝试一下。它会帮到你的。

代码语言:javascript
复制
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;}

谢谢

票数 0
EN

Stack Overflow用户

发布于 2015-02-13 00:45:11

仔细看看你的小提琴,我发现有两个问题:

  1. 您正在检查JS中的:visible,但CSS在li ul规则
  2. 上设置了display:none当可见时,第三个菜单级别将出现在第二个级别的下面(这更多的是一个UX/设计问题,而不是JS的问题)

第二个问题很容易用一些CSS解决,例如:

代码语言:javascript
复制
.level-3 { left: 200px; }

我认为第一个问题是因为您在CSS中使用'display‘将一个元素设置为隐藏,但试图在JS中检查:visible而不是display规则的值来切换它。This stackoverflow answer explains why this can cause problems可能比我更好,但我认为问题在于JS无法找到使用CSS设置为display:none的对象。

我已经created a fiddle which gives an example了如何通过替换JS中的这一行来避免这个问题:

代码语言:javascript
复制
if(!($(this).children('.level-2').is(':visible'))){

有了这个:

代码语言:javascript
复制
if($('.level-3').css('display') === 'none'){ 

(我保留了单击.level-1的逻辑,但更改了单击.level-2的逻辑以便于比较。)

在我的示例中,我还向不同的列表项添加了彩色背景,以提高可见性--这样可以更容易地查看项是否以这种方式出现在另一个列表项之上。我希望这能对你有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28475128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档