当前位置: 首页 > 面试题库 >

如何在Bootstrap v4中实现导航栏下拉悬浮?

董和风
2023-03-14
问题内容

我对新的引导程序版本有些困惑,因为它们将下拉菜单更改为div:

<nav class="navbar navbar-toggleable-md navbar-light bg-faded">
  <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
  <a class="navbar-brand" href="#">Navbar</a>
  <div class="collapse navbar-collapse" id="navbarNavDropdown">
    <ul class="navbar-nav">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Features</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Pricing</a>
      </li>
      <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="http://example.com" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
          Dropdown link
        </a>
        <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
          <a class="dropdown-item" href="#">Action</a>
          <a class="dropdown-item" href="#">Another action</a>
          <a class="dropdown-item" href="#">Something else here</a>
        </div>
      </li>
    </ul>
  </div>
</nav>

你们是否有想法在该代码段的“下拉列表”链接中获得一个悬停下拉列表,而不添加其他脚本代码(仅CSS和引导程序中的脚本)?我已经看到了引导css类,并且无法与引导V3中的类相关(我无需在V3中添加jquery即可完成此操作)。


问题答案:

简单的仅CSS 解决方案:

.dropdown:hover>.dropdown-menu {
  display: block;
}

当单击时,它仍将类show切换到它(并且不再悬停时将保持打开状态)。

为了解决这个 正确的
方法是使用保留基于指针设备的事件和属性:jQuery的mouseentermouseleave:hover。如果工作顺利,直觉,而不是干扰
与下拉如何工作的触摸设备。尝试一下,让我知道它是否适合您:

完整 的jQuery的解决方案触摸 不变):

v4.1.2之前的解决方案( 已弃用 ):

$('body').on('mouseenter mouseleave','.dropdown',function(e){
  var _d=$(e.target).closest('.dropdown');
  if (e.type === 'mouseenter')_d.addClass('show');
  setTimeout(function(){
    _d.toggleClass('show', _d.is(':hover'));
    $('[data-toggle="dropdown"]', _d).attr('aria-expanded',_d.is(':hover'));
  },300);
});



$('body').on('mouseenter mouseleave','.dropdown',function(e){

  var _d=$(e.target).closest('.dropdown');

  if (e.type === 'mouseenter')_d.addClass('show');

  setTimeout(function(){

    _d.toggleClass('show', _d.is(':hover'));

    $('[data-toggle="dropdown"]', _d).attr('aria-expanded',_d.is(':hover'));

  },300);

});



/* this is not needed, just prevents page reload when a dd link is clicked */

$('.dropdown a').on('click tap', e => e.preventDefault())


<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/>

<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js"></script>

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script>



<nav class="navbar navbar-toggleable-md navbar-light bg-faded">

  <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">

    <span class="navbar-toggler-icon"></span>

  </button>

  <a class="navbar-brand" href>Navbar</a>

  <div class="collapse navbar-collapse" id="navbarNavDropdown">

    <ul class="navbar-nav">

      <li class="nav-item active">

        <a class="nav-link" href>Home <span class="sr-only">(current)</span></a>

      </li>

      <li class="nav-item">

        <a class="nav-link" href>Features</a>

      </li>

      <li class="nav-item">

        <a class="nav-link" href>Pricing</a>

      </li>

      <li class="nav-item dropdown">

        <a class="nav-link dropdown-toggle" href id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">

          Dropdown link

        </a>

        <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">

          <a class="dropdown-item" href>Action</a>

          <a class="dropdown-item" href>Another action</a>

          <a class="dropdown-item" href>Something else here</a>

        </div>

      </li>

    </ul>

  </div>

</nav>

V4.1.2
shiplist
推出这种变化来的下拉列表中是如何工作的,使得以上不再起作用的解决方案。
这是在 v4.1.2* 及更高版本中悬停时打开下拉列表的 最新 解决方案: *

function toggleDropdown (e) {
  const _d = $(e.target).closest('.dropdown'),
    _m = $('.dropdown-menu', _d);
  setTimeout(function(){
    const shouldOpen = e.type !== 'click' && _d.is(':hover');
    _m.toggleClass('show', shouldOpen);
    _d.toggleClass('show', shouldOpen);
    $('[data-toggle="dropdown"]', _d).attr('aria-expanded', shouldOpen);
  }, e.type === 'mouseleave' ? 300 : 0);
}

$('body')
  .on('mouseenter mouseleave','.dropdown',toggleDropdown)
  .on('click', '.dropdown-menu a', toggleDropdown);



function toggleDropdown (e) {

  const _d = $(e.target).closest('.dropdown'),

      _m = $('.dropdown-menu', _d);

  setTimeout(function(){

    const shouldOpen = e.type !== 'click' && _d.is(':hover');

    _m.toggleClass('show', shouldOpen);

    _d.toggleClass('show', shouldOpen);

    $('[data-toggle="dropdown"]', _d).attr('aria-expanded', shouldOpen);

  }, e.type === 'mouseleave' ? 300 : 0);

}



$('body')

  .on('mouseenter mouseleave','.dropdown',toggleDropdown)

  .on('click', '.dropdown-menu a', toggleDropdown);



/* not needed, prevents page reload for SO example on menu link clicked */

$('.dropdown a').on('click tap', e => e.preventDefault())


<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>

<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>



<nav class="navbar navbar-expand-lg navbar-light bg-light">

  <a class="navbar-brand" href="#">Navbar</a>

  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">

    <span class="navbar-toggler-icon"></span>

  </button>



  <div class="collapse navbar-collapse" id="navbarSupportedContent">

    <ul class="navbar-nav mr-auto">

      <li class="nav-item active">

        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>

      </li>

      <li class="nav-item">

        <a class="nav-link" href="#">Link</a>

      </li>

      <li class="nav-item dropdown">

        <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">

          Dropdown

        </a>

        <div class="dropdown-menu" aria-labelledby="navbarDropdown">

          <a class="dropdown-item" href="#">Action</a>

          <a class="dropdown-item" href="#">Another action</a>

          <div class="dropdown-divider"></div>

          <a class="dropdown-item" href="#">Something else here</a>

        </div>

      </li>

      <li class="nav-item">

        <a class="nav-link disabled" href="#">Disabled</a>

      </li>

    </ul>

    <form class="form-inline my-2 my-lg-0">

      <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">

      <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>

    </form>

  </div>

</nav>

重要说明: 如果使用jQuery解决方案,则删除CSS很重要(否则,.dropdown-toggle单击或单击菜单选项时下拉列表不会关闭)。



 类似资料:
  • 本文向大家介绍JavaScript实现HTML导航栏下拉菜单,包括了JavaScript实现HTML导航栏下拉菜单的使用技巧和注意事项,需要的朋友参考一下 JavaScript实现HTML导航栏下拉菜单[悬浮显示] 前端界面进行设计时,我们会遇到鼠标悬浮在某选项上,然后就会凭空显示出菜单出来,这种设计的确受到了很多人的青睐。其实纯css也是可以实现的,但是会有一些限制,必须如要显示的菜单需要作为鼠

  • 因此,我刚刚从bootswatch复制了navbar表单的代码片段,并直接导入了所需的JQuery、bootstrap css和js文件,如下面的代码片段所示。当浏览器调整大小时,它会做出响应,但当我单击按钮以获取导航栏的下拉菜单时,它会出现故障,不会下降并停留在那里,而是自动切换回原来的状态。 代码中没有任何调整或更改,它在bootswatch网站上运行良好,但这里没有。有人能解释一下原因并给出

  • 本文向大家介绍Android实现App中导航Tab栏悬浮的功能,包括了Android实现App中导航Tab栏悬浮的功能的使用技巧和注意事项,需要的朋友参考一下 首先是“饿了么”导航Tab栏悬浮的效果图。 大家可以看到上图中的“分类”、“排序”、“筛选”会悬浮在app的顶部,状态随着ScrollView(也可能不是ScrollView,在这里姑且把这滑动的UI控件当作ScrollView吧)的滚动而

  • 本文向大家介绍js实现前端界面导航栏下拉列表,包括了js实现前端界面导航栏下拉列表的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js实现前端界面导航栏下拉列表的具体代码,供大家参考,具体内容如下 先来看成果图 html代码: css代码: 最重要的是js代码 利用js代码控制 简短介绍: slideToggle() 方法通过使用滑动效果(高度变化)来切换元素的可见状态。 如果被选元

  • 我这里有一个基本的Bootstrap navbar 我想做的是: (Navbar) -----logo---------------------登录/注册----- (下拉菜单) ----子项----子项---------------------------------- 在悬停时,我想使下拉菜单显示全宽右下方的navbar。悬停事件不是我有问题的,我有问题定位它正确的100%宽度。 更新 我看到

  • 本文向大家介绍Fullpage.js固定导航栏-实现定位导航栏,包括了Fullpage.js固定导航栏-实现定位导航栏的使用技巧和注意事项,需要的朋友参考一下 FullPage.js 是一个简单而易于使用的插件,用来创建全屏滚动网站(也被称为单页网站)。除了可以创建全屏滚动效果以外,也可以给网站添加一些水平的滑块效果。能够自适应不同的屏幕尺寸,包括平板电脑和移动设备。 开始制作自己的个人简历啦,决