【问题标题】:How to display a sub menu in hover如何在悬停时显示子菜单
【发布时间】:2016-01-16 08:13:51
【问题描述】:

我有一个带有子菜单(垂直)的菜单。我的第一个li 在子菜单中处于活动状态。 我的问题是当我将鼠标悬停在另一个 li 上时,我在最后一个中添加了子菜单。

我需要的是:

  • 当我将鼠标悬停在我的菜单中时,只获取我当前 li 的子菜单
  • 当我的光标未悬停在我的菜单中时,获取具有on class 的默认子菜单

这是jsFiddle的链接

http://jsfiddle.net/bymb6kvm/2/

这是我的代码:

<nav>
                <div id="menuu">
                    <ul class="niveau1">
                        <li><a id="lrf"  class="sousmenu" href="#">Test 1</a>
                            <ul id="lrfH" class="niveau2 on">
                                <li><a href="#">ss test 1</a></li>
                                <li><a href="#">ss test 2</a></li>

                            </ul>
                        </li>
                       <li><a id="cm" class="sousmenu" href="#">Test 2</a>
                            <ul id="cmH" class="niveau2">
                                <li><a href="#">ss test 1</a></li>
                                <li><a href="#">ss test 2</a></li>
                            </ul>
                        </li>
                        <li><a id="dj" class="sousmenu" href="#">Test 3</a>
                            <ul id="djH" class="niveau2">
                                <li><a href="#">ss test 1</a></li>
                                <li><a href="#">ss test 2</a></li>
                            </ul>
                        </li>

                    </ul>
                </div>
            </nav>  

CSS 代码

#menuu ul{

 margin:0;
 padding:0;
 padding-left:97px;
 line-height:30px;
    }
#menuu li{
    float: left;
    list-style: outside none none;

        }
.sousmenu{

 color: #000 !important;
 text-decoration:none;
 width:150px;
 height:30px;
 display:block;
 text-align:center;
  border:1px solid #000;
}
.niveau2{
    margin-left: -50px !important;
}
.niveau2 a{
    padding-left:20px !important;
    text-decoration:none;
    color:red ;
}
.sousmenu:hover{
    color: #fff !important;
    background-color: #ddd;
    border-bottom-color: #000 !important;
}
#menuu ul ul{
     position:absolute;
     visibility:hidden;
     padding-left:0px;
          }

#menuu ul ul li:hover a{
  color:#000;
}
#menuu ul ul ul{
 left:152px;
 top:-0.5px;
 display:none;
         }

 #menuu ul li:hover ul{
  visibility:visible;   
        }
.niveau2.on{
    visibility:visible !important;
}

JS 代码

$(document).ready(function(e){
                    $('.sousmenu').hover(function(e){
                        e.preventDefault();
                        var getID=$(this).attr('id');
                        $("#"+getID+"H").css("visibility","visible");
                        $(".on").css("visibility","hidden");
                    });

                });

【问题讨论】:

  • 如果你真的想依赖hover,你可以放弃JavaScript,直接使用CSS。见new fiddle。 (您的小提琴的问题是您使子菜单可见,但在 mouseleave 上不再不可见。)但是不建议仅使用悬停,因为它不适用于无法检测到悬停的设备。
  • 试试这个,希望这能解决你的问题。 jsfiddle.net/prajapati/y8r13hg7
  • 但我需要第一个 li 处于活动状态,我可以第一次看到子菜单,如果我将第二个 li 悬停在第一个

标签: javascript jquery html css menu


【解决方案1】:

试试这个:

$(document).ready(function(e) {
  $('.sousmenu').hover(function(e) {
    e.preventDefault();
    var getID = $(this).attr('id');
    $(".niveau2").hide();
    $("#" + getID + "H").show();
  });
});
#menuu ul {
  margin: 0;
  padding: 0;
  padding-left: 97px;
  line-height: 30px;
}

#menuu li {
  float: left;
  list-style: outside none none;
}

.sousmenu {
  color: #000 !important;
  text-decoration: none;
  width: 150px;
  height: 30px;
  display: block;
  text-align: center;
  border: 1px solid #000;
}

.niveau2 {
  margin-left: -50px !important;
}

.niveau2 a {
  padding-left: 20px !important;
  text-decoration: none;
  color: red;
}

.sousmenu:hover {
  color: #fff !important;
  background-color: #ddd;
  border-bottom-color: #000 !important;
}

#menuu ul ul {
  position: absolute;
  visibility: hidden;
  padding-left: 0px;
}

#menuu ul ul li:hover a {
  color: #000;
}

#menuu ul ul ul {
  left: 152px;
  top: -0.5px;
  display: none;
}

#menuu ul li:hover ul {
  visibility: visible;
}

.niveau2.on {
  visibility: visible !important;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<nav>
  <div id="menuu">
    <ul class="niveau1">
      <li><a id="lrf" class="sousmenu" href="#">Test 1</a>
        <ul id="lrfH" class="niveau2 on">
          <li><a href="#">ss test 1</a></li>
          <li><a href="#">ss test 2</a></li>

        </ul>
      </li>
      <li><a id="cm" class="sousmenu" href="#">Test 2</a>
        <ul id="cmH" class="niveau2">
          <li><a href="#">ss test 1</a></li>
          <li><a href="#">ss test 2</a></li>
        </ul>
      </li>
      <li><a id="dj" class="sousmenu" href="#">Test 3</a>
        <ul id="djH" class="niveau2">
          <li><a href="#">ss test 1</a></li>
          <li><a href="#">ss test 2</a></li>
        </ul>
      </li>

    </ul>
  </div>
</nav>

View on jsFiddle

【讨论】:

  • 感谢您的回复,但我认为当我将鼠标悬停在第二个 li 时他们遇到了问题,它工作完美,但是当我的光标不在我的菜单中时,我没有处于活动状态的默认菜单默认 on 包含 on class
猜你喜欢
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
  • 2013-11-16
  • 2015-05-10
相关资源
最近更新 更多