有一个水平菜单和一个更多按钮。
如果菜单项不适合整个可用宽度,则其余项应“隐藏”在下拉菜单中。当您单击该按钮时,将打开一个菜单,其中包含“剩余项目。
所有这些都应该适用于调整大小和加载。
编码:
function adaptMenu() {
var $category = $('.category'),
$categoryList = $category.find('.category-list'),
$categoryMore = $category.find('.category-more'),
$categoryMoreDD = $categoryMore.closest('.dropdown'),
$categoryMoreMenu = $categoryMoreDD.find('.dropdown-menu'),
$categoryItems = $categoryList.find('.category-item');
var $visible = [],
$hidden = [];
$categoryItems.hide();
var $width = $categoryList.width();
$categoryItems.show();
var $total = 0;
$categoryItems.each(function() {
var item = $(this);
item.css({
'width': 'auto'
});
$total += item.width();
if ($total < $width) {
$visible.push(item);
} else {
$hidden.push(item);
}
});
if ($hidden.length > 0) {
$categoryMoreMenu.append($hidden);
} else {
$categoryMoreMenu.find('li').hide();
}
}
$(window).on('load', function() {
adaptMenu();
});
$(window).on('resize', function() {
adaptMenu();
});
adaptMenu();
.category-list {
overflow: hidden;
}
.dropdown .category-item {
width: 100%;
margin: 0 !important;
}
.dropdown .cat {
width: 100%;
}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js" integrity="sha512-bLT0Qm9VnAYZDflyKcBaQ2gg0hSYNQrJ8RilYldYQ1FxQYoCLtUjuuRuZo+fjqhx/qtq/1itJ0C2ejDxltZVFg==" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx" crossorigin="anonymous"></script>
<div class="category">
<div class="container-fluid">
<div class="row">
<div class="col-9">
<ul class="category-list list-unstyled d-flex w-100">
<li class="category-item px-2"><a href="" class="cat btn btn-primary">1</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">2</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">3</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">4</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">5</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">6</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">7</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">8</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">9</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">10</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">11</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">12</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">13</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">14</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">15</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">16</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">17</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">18</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">19</a></li>
<li class="category-item px-2"><a href="" class="cat btn btn-primary">20</a></li>
</ul>
</div>
<div class="col-3">
<div class="dropdown">
<button class="category-more w-100 btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
More
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
</div>
</div>
</div>
</div>
</div>
</div>
问题:如何在加载和调整大小时显示/隐藏不适合可用可见菜单宽度的下拉菜单中的菜单项?
我有一个有趣的解决方案。我真的不认识作者,但多亏了他,结果很好,不需要做任何其他事情。我将与您分享: