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(); }); });
听起来你正在寻找取消任何不完整动画的stop
function。
$('.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(); }); });