当前位置: 首页 > 知识库问答 >
问题:

带自定义悬停处理程序的下拉菜单,鼠标移动到子菜单

吕高寒
2023-03-14

我自己处理悬停事件来添加一个三角形指针和一个水平对齐的子菜单栏。当单击顶部菜单时,它可以很好地显示和导航到子菜单。问题是在悬停期间,试图将鼠标移动到子菜单时,子菜单栏会消失。

TIA

代码

null

$("#menubar li.dropdown>a.nav-link").hover(function() {
    if ($("#menubar li.dropdown").filter(function() {
        return $(this).data("show")
      }).length === 0)
      $(this).closest("li").addClass("active show");
  },
  function() {
  /*when top menu is clicked, don't hide submenu*/
    if ($("#menubar li.dropdown").filter(function() {
        return $(this).data("show")
      }).length === 0)
      $(this).closest("li").removeClass("active show");
  });

$("#menubar li>a.nav-link").on("click", function(e) {
  e.stopPropagation();

  var $li = $(this).closest("li");

  if (!$li.hasClass("dropdown")) {
    $("#menubar li.dropdown").removeClass("active show");
    $("#menubar li.dropdown").data("show", false);
  } else {
    if ($li.data("show")) {
      $li.removeClass("active show");
      $li.data("show", false);
    } else {
      $("#menubar li.dropdown").removeClass("active show");
      $li.addClass("active show");
      $li.data("show", true);
    }
  }
});
$("#menubar ul.dropdown-menu>li>a").on("click", function(e) {
  $("#menubar li.dropdown").removeClass("active show");
  $("#menubar li.dropdown").data("show", false);
});
#menubar ul {
  height: 44px;
  padding-top: 5px;
}

#menubar .nav-link {
  font-size: 14px;
  padding: 8px 50px 0 0 !important;
  color: white !important;
}

#menubar .nav-link:focus,
#menubar .nav-link:hover,
#menubar .nav-link:visited {
  color: white !important;
}

#menubar .navbar {
  padding-left: 0 !important;
}

.navbar.navbar-dark {
  height: 44px;
  margin: 0 15%;
}

nav.navbar .navbar-nav li.nav-item.active:after {
  content: "";
  position: relative;
  margin-left: -31px;
  left: 50%;
  bottom: 15px;
  border-left: 6px solid transparent;
  border-right: 6px solid transparent;
  border-bottom: 6px solid white;
}


/*submenu*/

#menubar li.dropdown.show {
  position: static;
}

#menubar li.dropdown.show .dropdown-menu {
  display: table;
  width: 100%;
  text-align: center;
  left: 0;
  right: 0;
  margin: 0;
}

.dropdown-menu>li {
  display: table-cell;
  padding-top: 6px;
}

.dropdown-menu>li a {
  font-weight: 600;
}

.dropdown-menu>li a:hover {
  text-decoration: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">

<nav class="navbar navbar-expand-md navbar-dark ">
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#menubar">
                        <span class="navbar-toggler-icon"></span>
                    </button>
  <div class="navbar-collapse" id="menubar">
    <ul class="nav navbar-nav">
      <li class="nav-item ">
        <a class="nav-link" href="#">Menu1</a>
      </li>
      <li class="nav-item dropdown">
        <a class="nav-link" data-toggle="dropdown" href="#">Menu2</a>
        <ul class="dropdown-menu" role="menu">
          <li><a href="#">Submenu1</a></li>
          <li><a href="#">Submenu2</a></li>
          <li><a href="#">Submenu3</a></li>

        </ul>
      </li>

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

null

共有1个答案

越雨泽
2023-03-14

您需要将悬停事件从链接更改为列表项,对于您的情况来说,这是一种常见的做法:

$("#menubar li.dropdown").hover(function() {
    ...
});
 类似资料:
  • 问题内容: 好的,所以我需要的很简单。 我已经在导航栏中设置了一些下拉菜单(使用),并且工作正常。 问题是它可以工作“ ”,而我希望它可以工作“ ”。 有内置的方法吗? 问题答案: 最简单的解决方案是使用CSS。添加类似…

  • 问题内容: 我试图做一个简单的CSS下拉菜单。当您将鼠标悬停在链接上时,我无法实现下拉子菜单。以下是我的HTML和CSS规则,谢谢。 问题答案: 尝试这个: 问题是您的菜单ul是可见的(始终),但是由于this规则的选择器,所以li里面的li是(始终)不可见。 请记住,visible:hidden隐藏元素,但仍在DOM中占用空间,而display:none隐藏元素并将其从页面元素流中移除 另外,您

  • 标题是冗长的,有点难以理解,但想法是我有一个下拉菜单,当产生下拉菜单的主要链接悬停在上面,它们的背景颜色和文本颜色改变,菜单出现。问题是,当你移动光标到菜单上点击刚刚出现的链接时,上面的主要链接的悬停效果消失了。菜单保持和工作只是很好,但我想理想的链接,产生菜单的悬停,以保持它的悬停效果,而菜单是向上的。 这是我所说的代码... CSS HTML 这里有一个小提琴的代码在起作用... https:

  • 关于我的上一个问题(bootstrap上的下拉菜单不起作用),我正在为li下拉菜单的子菜单构建一个子菜单。这意味着它是嵌套的。银行菜单下有交易下拉菜单,交易下拉菜单下有不同类型交易的菜单。顺便说一下,我已经成功地创建了它,但是在悬停期间,“事务”模块的子菜单出现在事务菜单的前面,阻止了作为事务的父菜单。在悬停期间,如何避免它并将其放置在事务菜单的右侧?不管怎样,我已经使用了“右下拉菜单”,但它不会

  • 我正在尝试将鼠标悬停在动画菜单上并在菜单中选择一个项目。我尝试先通过xpath在菜单上执行悬停,然后通过xpath执行单击菜单项,如下所示。 我有个例外 org.openqa.selenium.interactions。MoveTargetOutOfBoundsException:元素内的偏移量无法滚动到视图中 我还尝试将这些行为链接如下: 这也会引发相同的异常。 有什么想法来实现动画菜单项的点击

  • 问题内容: 我是堆栈溢出的新手。我需要创建一个静态下拉列表,然后根据在静态下拉列表中选择的值创建一个动态下拉列表。只是Coldfusion和html。没有其他花哨的东西。因此,从第一个下拉菜单中,用户将选择:颜色,ID,官员,学校,然后点击“继续”按钮 然后在同一页面或不同页面上,如果选择了颜色,它将在数据库中进行查询并给出不同颜色的结果,如果选择了id,则将提供查询中的ID编号列表。如果选择了这