【发布时间】:2011-09-06 07:41:40
【问题描述】:
鉴于页面上有许多 '.hovertarget' div,下面的 mouseover/mouseout 事件似乎是同步触发的 - 即,如果您将鼠标从一项 (A) 快速移动到另一项 (B),B 会淡出-in 在 A 淡出完成之前不会开始。如果您快速执行此操作,那么您将有一系列淡入/淡出播放几秒钟。 这不是我想要的行为。如何更改这一点,以使事件彼此独立?
我使用的是 jquery 1.6.2
$(".hovertarget").live('mouseover mouseout', function(event) {
var child = $(event.target).find(".targetchild");
if (event.type == 'mouseover') {
child.fadeIn(200);
} else {
child.fadeOut(200);
}
});
HTML 这适用于(按要求):
<div class="hovertarget" id="s1"><div class="targetchild"></div></div>
<div class="hovertarget" id="s2"><div class="targetchild"></div></div>
【问题讨论】:
-
您是否尝试使用 .stop() 方法停止动画?
-
你试过用fadeTo吗,你也应该用delegate代替live。将 $(".hovertarget").live 更改为 $(".hovertarget").delegate 很简单,应该可以正常工作。同样在这种情况下,fadeTo 会更好地工作,因为它不会应用 display:none,否则您可能会得到那种抖动效果或其他一些不需要的效果。
-
@matt - 不会尝试。 live和delegate有什么区别? (我使用 live 是因为这些是动态添加的元素)。
-
@UpTheCreek 代表效率更高。它们的工作方式相同,因为它会在加载 DOM 后添加事件,但它只会扫描 DOM 的特定部分。实际上再次查看您的代码,您需要执行
$(container).delegate(".hovertarget", ('mouseover mouseout', function(event) {...})之类的操作,但容器可以是主体,您希望尽可能集中注意力。因此,如果您有父容器,请使用它。所以你可以做$("body").delegate,还是比用live好。
标签: jquery