2009-09-28 73 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()方法还可以防止事件对象移动到下一个节点,但不允许执行当前节点上的任何其他事件侦听器。