2012-07-10 151 views
2

首先,我觉得这个有点难以解释,因为英语不是我的母语。所以请原谅。jQuery悬停事件,防止功能被完全执行

我写了一个小的通知函数,它在表单提交时触发。正常行为是:

  • 用户提交表单
  • 注淡入
  • 延迟2秒
  • 注淡出

当音符盘旋,它扩展了css-transition。从逻辑上讲,它不应该淡出,直到用户将其折叠mouseleave。 而这里存在我的问题:只要div被徘徊,我如何防止fadeOut声明被执行?

我想是这样

if ($('#notification').hover()){ 
    return ; 
} 

但当然,第一条语句已经excuted如下所示:

http://jsfiddle.net/6DsJb/

我也尝试了一些其他的东西,比如一个单独的脚本正在收听hover事件,然后致电$('#notification').show() ;

两者都不起作用。我知道这是推理中的一个简单错误,但是地狱,我被卡住了。

在此先感谢。

回答

1

fadeIn通话setTimeout后,用一个函数:

  • 如果通知被折叠,隐藏它。
  • 否则,使用.mouseleave隐藏鼠标焦点后隐藏它。

即:

$('#notification').fadeIn(500); 

setTimeout(function() { 
    if (notification_is_collapsed) 
    $('#notification').fadeOut(500); 
    else 
    $('#notification').mouseleave(function() { 
     $('#notification').fadeOut(500); 
    }); 
}, 2000); 
+0

对不起,但我不明白这一点。 is_collapsed是不是表示这个音符已经消失了,如果不是,它不会和mouseleave动作一样吗? – Sprottenwels 2012-07-11 06:35:47

+0

'notification_is_collapsed'应该被替换为评估在2秒钟过去之前笔记是否已经被折叠的东西。 – WhyNotHugo 2012-07-11 11:45:51

+0

再次感谢,我明白了,虽然有点不同: http:// pastebin。com/6gpJTgKc – Sprottenwels 2012-07-12 14:21:09

1

悬停功能需要两个参数:当鼠标进去,而当鼠标离开(http://api.jquery.com/hover/

所以你可以做这样的事情,而不是:

$('#notification').hover(
function() {}, function() { 
    $(this).delay(500).fadeOut(500); 
}); 

这里是你的jsfiddle更新:http://jsfiddle.net/6DsJb/1/

+0

谢谢,但这只能在没有自动装填的情况下运行,所以用户必须明确地悬停注释才能摆脱它。我与延迟autofade结合使用,但它仍然覆盖它。 – Sprottenwels 2012-07-11 06:33:00