我試圖製作一個子菜單,當鼠標懸停在某個元素上時,它可以從主菜單欄滑下。我目前做這個使用下面的代碼:在jQuery中創建下滑子菜單的最有效方法
$(document).ready(function() {
$('.navlist li a').hover(function() {
if($(this).attr('data-param') == "parent")
{
$('#subnavbar-' + $(this).attr('data-slug')).slideDown(200);
}
}, function() {
if($(this).attr('data-param') == "parent")
{
var name = '#subnavbar-' + $(this).attr('data-slug');
setTimeout(function() {
if(!$(name).is(':hover'))
{
$(name).slideUp(200);
}
}, 200);
}
});
});
a {
color: white;
}
.navbar {
background-color: green;
margin-bottom: 0;
height: 30px;
}
ul.navlist {
list-style: none;
text-indent: 0;
margin: 0;
padding: 0;
float: left;
}
ul.navlist li {
display: block;
width: 100px;
float: left;
}
.subnavbar {
background-color: blue;
margin-top: 0;
height: 20px;
display: none;
}
ul.subnavlist {
list-style: none;
text-indent: 0;
margin: 0;
padding: 0;
float: left;
}
ul.subnavlist li {
display: block;
width: 80px;
float: left;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="navbar">
<ul class="navlist">
<li><a href="#">Item 1</a></li>
<li><a href="#" data-param="parent" data-slug="test">Hover Here</a></li>
<li><a href="#">Item 3</a></li>
</ul>
</div>
<div class="subnavbar" id="subnavbar-test">
<ul class="subnavlist">
<li><a href="#">Subitem 1</a></li>
<li><a href="#">Subitem 2</a></li>
<li><a href="#">Subitem 3</a></li>
</ul>
</div>
你可以通過運行摘要中看到;它的工作原理,但有很多錯誤,我不知道什麼是最好的解決方法。首先,如果用戶在主菜單項上來回移動,我不希望事件被垃圾郵件,我可以使用setTimeout()
和clearTimeout()
來解決此問題,但如果可能,我想要一個更好的方法。其次,我不確定如何最好的讓subnavbar不收縮,如果用戶在它上面而不是父菜單項,我現在怎麼做,但如果用戶懸停,導航欄不收回。
如果我沒有記錯,你需要使用stopPropagation(),雖然我不知道 – Chanckjh 2015-04-03 12:25:44
這是必須使用jQuery嗎?這可以很容易地完成,只需css – 2015-04-03 12:27:22
@AlvaroMenéndez不,它絕對不是必須使用jQuery;我真的更喜歡我認爲的CSS解決方案! – 2015-04-03 12:28:05