我有一個看起來像這樣的嵌套串列:
<ul class="menu-wrapper">
<li>
<a href="#">Menu item</a>
<ul class="sub-menu">
<li>
<a href="#">Subitem-1</a>
<ul>
<li>Sub-Subitem-1</li>
<li>Sub-Subitem-2</li>
<li>Sub-Subitem-3</li>
</ul>
</li>
<li>
<a href="#">Subitem-2</a>
<ul>
<li>Sub-Subitem-1</li>
<li>Sub-Subitem-2</li>
<li>Sub-Subitem-3</li>
</ul>
</li>
</ul>
</li>
</ul>
當懸停ul.menu-wrapper > li
專案時,一個.active
類將應用于子選單串列中的第一個ul.sub-menu
和第一個專案:li
$('ul.menu-wrapper').children().hover(
function() {
let subMenu = $(this).find('ul.sub-menu').first()
subMenu.addClass('active')
subMenu.children().first().addClass('active')
},
function() {
let subMenu = $(this).find('ul.sub-menu').first()
subMenu.removeClass('active')
}
)
現在我需要將li
專案懸停在 中ul.sub-menu
并將.active
類更改為懸停的專案。
我可以通過在專案上添加一個.hover()
方法來做到這一點。subMenu.children()
$('ul.menu-wrapper').children().hover(
function() {
...
subMenu.children().hover(
function() {
$(this).addClass('active')
},
function() {
$(this).removeClass('active')
}
)
},
function() {
...
}
)
當一個子選單項被懸停并且指標回傳到該ul.menu-wrapper > li
專案時,我希望至少有一個ul.sub-menu > li
專案與.active
該類。
當前,mouseleave
當指標從子選單移回父串列項時,該方法正在洗掉該類。我怎樣才能防止這種情況始終有一個ul.sub-menu > li
上課.active
?
演示https://jsfiddle.net/5Lwyh3xs/
uj5u.com熱心網友回復:
如果沒有 li 項具有活動類,則在滑鼠移出時將活動類添加到第一個 li。
$('ul.menu-wrapper').children().hover(
function() {
let subMenu = $(this).find('ul.sub-menu').first()
subMenu.addClass('active')
subMenu.children().first().addClass('active')
subMenu.children().hover(
function() {
$(this).addClass('active').siblings().removeClass('active')
},
function() {
$(this).removeClass('active')
if($('.sub-menu > li.active').length == 0) {
subMenu.children().first().addClass('active')
}
}
)
},
function() {
let subMenu = $(this).find('ul.sub-menu').first()
subMenu.removeClass('active')
}
)
body {
margin: 0;
padding: 0;
}
ul {
list-style-type: none;
padding: 0;
margin: 0;
}
ul.menu-wrapper {
height: 80px;
}
ul.menu-wrapper {
background: gray;
}
ul.menu-wrapper>li {
height: 100%;
display: flex;
align-items: center;
}
ul.menu-wrapper ul.sub-menu {
visibility: hidden;
position: absolute;
top: 80px;
}
ul.menu-wrapper ul.sub-menu.active {
visibility: visible;
}
ul.menu-wrapper ul.sub-menu.active>li.active {
background: darkmagenta;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<nav role="navigation" id="navigation-wrapper">
<ul class="menu-wrapper">
<li>
<a href="#">Menu item</a>
<ul class="sub-menu">
<li>
<a href="#">Subitem-1</a>
<ul>
<li>Sub-Subitem-1</li>
<li>Sub-Subitem-2</li>
<li>Sub-Subitem-3</li>
</ul>
</li>
<li>
<a href="#">Subitem-2</a>
<ul>
<li>Sub-Subitem-1</li>
<li>Sub-Subitem-2</li>
<li>Sub-Subitem-3</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
https://jsfiddle.net/y5qkb7mv/
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/525670.html
上一篇:將h1內容保留在div中