jQuery – 如何使用stopPropagation()

我以前做过这个,但是我无法让它工作……

我需要以下jquery才能拥有.stopPropagation函数,因此如果用户过快地hover在三个元素上,动画就不会发疯!

$(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(); }); }); 

听起来你正在寻找取消任何不完整动画的stopfunction。

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

或者如果您希望任何正在进行的动画“回滚”,请尝试:

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

查看文档以获取更多信息。

使用stopPropagation()和stopImmediatePropagation()时要小心,就好像它们是同一个东西:

  • Event.stopPropagation()方法阻止事件对象移动到下一个节点,但仅在允许当前节点上的任何其他事件侦听器执行之后。

  • Event.stopImmediatePropagation()方法还可以阻止事件对象移动到下一个节点,但不允许当前节点上的任何其他事件侦听器执行。

 $(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()

我可能错了,但这可能有效:

 $(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(); }); });