jQuery延迟没有在mouseout上工作

时间:2011-11-01 04:00:14

标签: jquery function jquery-animate delay

有人可以解释为什么这不起作用吗?

jQuery('.right-et-tooltip').delay(800).mouseout(function(){
        jQuery(this).find('.right-et-tooltip-box').animate({ opacity: 'hide', left: '-100px' }, 30);
});

我毫不拖延。只要鼠标一出,BOOM就会消失。

谢谢,我尝试了一些事情,所以感到沮丧。

1 个答案:

答案 0 :(得分:1)

你的延迟绝对没有,因为它绑定到jQuery选择器而不是mouseout处理程序中的函数。

试试这个......

jQuery('.right-et-tooltip').mouseout(function(){
        jQuery(this).find('.right-et-tooltip-box').delay(800).animate({ opacity: 'hide', left: '-100px' }, 30);
});

你的jsFiddle应用了更正...

http://jsfiddle.net/zGtBN/2/


编辑(旁注):

使用mouseenter& mouseleave方法,而不是mouseover& mouseout方法,在鼠标悬停期间往往会导致快速闪烁效果。

Then you can simply combine the mouseenter and mouseleave handlers into one by using the jQuery .hover() method.

在这里用.hover()方法插入同样的两个函数......

http://jsfiddle.net/zGtBN/3/


编辑2:

在离开动画完成之前重新进入时,动画将排队。如果你输入&几次离开真的很快,你会让所有动画在停止之前闪烁。

要阻止动画队列堆叠并创建一个新问题,因为mouseleave延迟会导致/ {关闭mouseenter函数jQuery(this).find('.right-et-tooltip-box').stop(true,false).animate({ opacity: 'show', left: '-100px' }, 30);

mouseenter

mouseleave后,它会立即停止任何true动画。 “clearQueue”选项上的false清除动画队列,“jumpToEnd”选项上的{{1}}表示停止当前动画而不是立即完成动画。

修改演示......

use a jQuery .stop(true, false)