jQuery延迟不适用于mouseout

Posted

技术标签:

【中文标题】jQuery延迟不适用于mouseout【英文标题】:jQuery delay not working on mouseout 【发布时间】:2011-12-19 05:23:45 【问题描述】:

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

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

我一点也不耽误。鼠标一出,BOOM就消失了。

谢谢,我已经尝试了一些东西,所以很沮丧。

【问题讨论】:

能否也提供html。我建议你把它扔到 jsfiddle.net 上 哦,但根本无法让它在那里工作......缺少一些东西......虽然不知道是什么 您犯了一个简单的错误,将delay() 绑定到jQuery 选择器而不是mouseout 函数。请参阅下面的答案。 【参考方案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/


编辑(附注):

使用mouseentermouseleave 方法比使用mouseovermouseout 方法要好得多,后者往往会在鼠标悬停时导致快速闪烁效果。

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 延迟,use a jQuery .stop(true, false)mouseenter 函数上像这样...

jQuery(this).find('.right-et-tooltip-box').stop(true,false).animate( opacity: 'show', left: '-100px' , 30);

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

修改后的演示...

http://jsfiddle.net/zGtBN/4/

【讨论】:

工作得很好,我对 mouseenter 和 mouseleave 进行了更改,它仍然闪烁但它又回来了...我相信我会找到一种方法让它不这样做。它这样做是因为我确实“离开”了,所以它在闪烁时开始延迟,然后重新显示。 @oneadvent:这是一个不同的问题。这是因为动画在动画完成之前进入和离开时正在排队。使用 jQuery 的 .stop() 方法停止动画并清除队列。请参阅我对演示的最新编辑。

以上是关于jQuery延迟不适用于mouseout的主要内容,如果未能解决你的问题,请参考以下文章

休眠延迟加载不适用于多对一映射

休眠延迟加载不适用于 Spring Boot => 无法延迟初始化角色集合无法初始化代理 - 无会话

Symfony Messenger:重试延迟不适用于 Redis 传输

Angular <custom-component> 不适用于延迟加载的模块

Spring boot JPA - 延迟加载不适用于一对一映射

延迟加载的 vue-router 组件不适用于 s-s-r