我創建了一個簡單的下拉菜單與jQuery下拉菜單:在哈弗無限幻燈片使用jQuery
https://jsfiddle.net/pmksgz3w/
HTML
<ul>
<li>Page A</li>
<li>Page B
<ul>
<li>Dropdown</li>
<li>Dropdown</li>
</ul>
</li>
</ul>
jQuery的
$(document).ready(function(){
$('ul> li').hover(function() {
$(this).find('ul').slideToggle();
});
});
當我將鼠標懸停在頁面B,然後顯示下拉菜單。如果我將頁面B上的光標非常緩慢地移動到右側(參見圖片),那麼下拉菜單將關閉,因爲li不會在短時間內懸停。我怎樣才能防止下拉菜單馬上關閉?如果我將光標移動非常快的下拉菜單
更糟糕的問題發生。因爲這樣,下拉菜單將在無限循環中滑動並滑動。
我在How to tell .hover() to wait?找到了一個從2009年開始的有希望的解決方案,但是當我嘗試它時,答案不起作用,(編輯注:現在可用,請參閱下面的編輯)。此外還提到,應該使用hoverIntend插件。我下載插件,並改變了我的jQuery代碼到
$(document).ready(function(){
$('ul> li').hoverIntend(function() {
$(this).find('ul').slideToggle();
});
});
,雖然它提高了一些東西,它會馬上閉合和無限循環保持了上述問題。我怎麼解決這個問題?
編輯:我設法解決了第一個問題!現在下拉不會立即關閉!
https://jsfiddle.net/5sxvsu8w/
我不得不改變jQuery代碼如下:
$(document).ready(function(){
var timer;
$('ul> li').hover(function() {
clearTimeout(timer);
$(this).find('ul').slideDown('fast');
}, function() {
var list = $(this).find('ul');
timer= setTimeout(function() {
list.slideUp('fast');
}, 2000);
});
});
然而,無限循環問題仍然存在。
謝謝。爲什麼當你用** $(this).find('ul')**在這裏https://jsfiddle.net/6v4vuvju/替換** $('li> ul')**時它不起作用?如果我將鼠標懸停在** Page B **上,然後將光標移開並返回到**頁面B **,則不會顯示下拉菜單。另外,當我在**頁面B **上移動光標,然後在第二個**下拉菜單上移動光標時,下拉菜單會再次隱藏。 – Adam
@Adam我改變了我的答案,試圖解決您在評論和無限循環中寫下的問題。我希望這可以幫助。 – silviagreen
完美的'stop()'正是我所需要的! – Adam