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

我对新的引导程序版本有些困惑,因为它们将下拉菜单更改为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即可完成此操作)。

回答:

解决方案:

.dropdown:hover>.dropdown-menu {

display: block;

}

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


为了解决这个

方法是使用保留基于指针设备的事件和属性:jQuery的mouseentermouseleave:hover。如果工作顺利,直觉,而不是干扰

与下拉如何工作的触摸设备。尝试一下,让我知道它是否适合您:

完整 ( 触摸 不变):

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推出这种变化来的下拉列表中是如何工作的,使得以上不再起作用的解决方案。

这是在 解决方案: *

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单击或单击菜单选项时下拉列表不会关闭)。

以上是 如何在Bootstrap v4中实现导航栏下拉悬浮? 的全部内容, 来源链接: utcz.com/qa/399732.html

回到顶部