jQuery悬停无限循环

Posted

技术标签:

【中文标题】jQuery悬停无限循环【英文标题】:jQuery hover infinite loop 【发布时间】:2011-06-07 12:56:34 【问题描述】:

我正在尝试使用 .hover 使 html 元素看起来像在发光。我的代码如下:

var glow = $('<div class="glow">...</div>');

$(this).hover(function() 
   glow.fadeIn();
, function() 
   glow.fadeOut();

我得到的效果是,在鼠标悬停时,淡入淡出只是在无限循环中一遍又一遍地重复。当我查看控制台时,hoverIn 和 hoverOut 处理函数不断被调用。

有什么想法吗?

谢谢!

【问题讨论】:

如果你能提供一个jsfiddle.net会很好 请提供更多代码。您的$(this) 让我认为您可能将.hover() 分配为另一个事件的结果,因此它被重复分配。 我读到的方式似乎是在悬停时创建glow div,而不是淡入/淡出现有的div。 (不可否认,现在已经很晚了,我有点累了......) jsfiddle: jsfiddle.net/c4ha7/1 【参考方案1】:

我想你想改用这段代码:

var glow = $('<div class="glow">...</div>');

glow.hover(function() 
   $(this).fadeIn();
, function() 
   $(this).fadeOut();

var glow = $('<div class="glow">...</div>');

glow.hover(function() 
   glow.fadeIn();
, function() 
   glow.fadeOut();

我相信现在您的 $(this) 是模棱两可的,并且可能没有将 hover() 处理程序放在正确的对象上。

您也有可能在这里遗漏了一些重要的东西(例如,glow 放入 DOM 的位置)。

如果情况变得更糟,您可以完全跳过hover,而只使用mouseovermouseout,或者如果您想要真正了解整个事情,您可以将 bind 与 mouseover 和 mouseout 事件一起使用。

实际上,由于您在单个鼠标悬停事件上看到重复操作,这可能表明您以某种方式将单个 hover 处理程序的许多实例绑定到 glow 对象。如果最终出现这种情况,您可以使用unbind 在绑定新处理程序之前删除当前处理程序,但如果您能找到一种方法,避免多重绑定是更好的策略。

我希望这会有所帮助!

【讨论】:

所以这行不通。问题可能是 .hover 的上下文。基本上,我在 dom 中寻找包含某个类(“glow”)的元素。如果元素具有类,我将附加一个新的 dom 元素。 这是一个 jsFiddle,它显示了我正在做的更多事情:jsfiddle.net/c4ha7/1

以上是关于jQuery悬停无限循环的主要内容,如果未能解决你的问题,请参考以下文章

如何使用jQuery无限循环播放音频文件

带有下一个的jQuery动画无限循环

Jquery简单的无限循环滑块逻辑

利用jQuery实现图片无限循环轮播(不借助于轮播插件)

Jquery点击,循环切换Class的效果

当没有更多数据时如何停止无限循环(分页)