2010-01-05 104 views
2

我有一個簡單的水平菜單,當我將鼠標懸停在每個項目上時,子菜單都會滑落。所以基本上這是我們經常看到的典型導航菜單。我希望當鼠標懸停在子菜單上時,鼠標向下和向上滑動。我的問題是,如果我在項目中移動鼠標的速度很快,會出現多個子菜單保持可見狀態。我想這是因爲當我觸發幻燈片時,下滑沒有完成。一些想法來防止這種情況?繼承人我的代碼:jquery懸停事件無法正常工作

 $('#menu > li').hover(
       function() { 
        $('ul',$(this)).slideDown(); 
       }, 
       function() { 
        $('ul',$(this)).slideUp(); 
       } 
      ); 

謝謝!

回答

5

你應該叫stop向下滑動起來之前,從你的描述,你也應該通過true兩個這樣的可選參數:

$('ul',$(this)).stop(true, true).slideDown(); 

的第一個參數( clearQueue)告訴jQuery清除動畫隊列,停止任何排隊的動畫。

第二個參數(gotoEnd)告訴jQuery完成當前的動畫。 (這個參數在你的情況下可能不需要,這取決於你想要的效果。)

+0

非常感謝'.stop()'的參數說明!我正在使用'.stop()'來達到類似的效果,這個問題依然存在,直到我爲這兩個參數傳遞true,正如你所建議的:) – Brian 2011-03-14 15:29:10

3

在上載之前,您可以使用stop()函數來停止所有當前的動畫。

http://docs.jquery.com/Effects/stop

+0

你的意思是$('ul',$(this))。stop()。slideUp(); ? 我試過這個,但後來我有一個奇怪的行爲。如果我開始快速地向左右移動鼠標,子菜單開始收縮:) – Bruno 2010-01-05 21:24:36

1

什麼可能發生的情況是,MouseLeave事件在不觸發的。您可以通過在事件處理程序的開頭添加一些console.log語句,然後檢查IE8的開發人員工具或Firebug以查看是否所有事件正在觸發來測試該事件。

如果要中斷正在運行的動畫,請使用jQuery has a stop() method that does that。您可能還希望每個slideDown都會導致其他所有人滑動。