2009-09-28 78 views
0

我這樣做過,但我無法得到這個工作...jQuery的 - 如何使用stopPropagation()

我需要以下的jQuery有一個.stopPropagation功能,所以動畫如果用戶過快地移動三個元素就不會發瘋!

$(function() { 
      var tabContainers = $('div.subMenu > div'); 
      tabContainers.hide(); 

      $('.mainMenuDiv a').hover(
      function (e) { 
       tabContainers.filter(this.hash).slideDown(); 
       e.stop(); 
      }, 
      function(e){ 
       tabContainers.filter(this.hash).slideUp(); 
       e.stopPropagation(); 
      }); 
    }); 
+0

我不確定你爲什麼想要?您正在使用懸停效果,因此一般預期的行爲是,如果用戶快速將鼠標移動到多個元素上,那麼它們都會生成動畫。否則,您使用什麼標準來決定用戶實際想要擴展哪一個? (這通常是爲什麼點擊是用於擴展和隱藏的首選用戶交互) – Steerpike 2009-09-28 20:56:42

回答

4

聽起來像是你正在尋找的stop功能取消所有未完成的動畫。

$('.mainMenuDiv a').hover(
    function (e) { 
     tabContainers.filter(this.hash).stop().slideDown(); 
    }, 
    function(e){ 
     tabContainers.filter(this.hash).stop().slideUp(); 
    } 
); 

,或者如果您想任何正在進行的動畫(S)是「回滾」嘗試:

$('.mainMenuDiv a').hover(
    function (e) { 
     tabContainers.filter(this.hash).stop(true, true).slideDown(); 
    }, 
    function(e){ 
     tabContainers.filter(this.hash).stop(true, true).slideUp(); 
    } 
); 

退房的docs更多信息。使用stopPropagation()和stopImmediatePropagation()時,好像他們是同樣的事情

+1

+1,第二個代碼(真實,真實)是唯一一個不卡住的人(正如我在其他回覆中的評論中所解釋的)。 – 2009-09-28 21:01:47

+0

啊,是的,與(真實的,真實的)參數很好地聯繫。我知道有些事我忘了。祝好運Marve。 – KyleFarris 2009-10-01 14:58:31

0
$(function() { 

     var tabContainers = $('div.subMenu > div'); 
     tabContainers.hide(); 

     $('.mainMenuDiv a').hover(function() { 

      tabContainers.filter(this.hash).dequeue().slideDown(); 

     },function() { 

      tabContainers.filter(this.hash).dequeue().slideUp(); 

     }); 

}); 

希望這有助於。 ;)事件從子元素向其所有父母「冒泡」,並且您將event.stopPropragation();event.stopImmediatePropagation()。但是要停止動畫你dequeue()

+0

如果用戶反覆並非常快速地懸停和移出元素,則動畫將在IE和FF下卡住。不知道這是否是一個錯誤, – 2009-09-28 20:58:03

0

我可能是錯的,但是這可能工作:

$(function() { 
    var tabContainers = $('div.subMenu > div'); 
    tabContainers.hide(); 
    $('.mainMenuDiv a').hover(function() { 
     tabContainers.filter(this.hash).stop().slideDown(); 
    },function() { 
     tabContainers.filter(this.hash).stop().slideUp(); 
    }); 
}); 
+0

如果用戶反覆,非常快速地將元素懸停在外,動畫將在IE和FF下「卡住」。不知道這是否是一個錯誤。 – 2009-09-28 21:00:36

2

要當心:

  • 的Event.stopPropagation()方法阻止事件對象從上移動到下一個節點,但只有在當前節點上的任何其他事件偵聽器被允許執行之後。

  • Event.stopImmediatePropagation()方法還可以防止事件對象移動到下一個節點,但不允許執行當前節點上的任何其他事件偵聽器。