鼠标移动事件导致无限循环,即使在鼠标移动停止后也是如此
Mousemove event is causing infinite loop even after mousemovement has stopped
这是有问题的页面: http://yac-web.com/clients/dessert/我正在尝试设置一种在鼠标移动时发生并在不移动时停止的效果。由于某种原因,事件开始正常,但随后只是继续循环。我对JS不是很熟悉,找不到太多关于鼠标移动事件的信息。谢谢
$('html').mousemove(function () {
$('html').toggleClass("change", 1000, "easeOutSine");
})
然后
html {
background: rgba(191, 54, 245, 1);
}
.change {
background: rgba(61, 98, 245, 1);
}
演示:小提琴
基本问题是,当鼠标移动时,您正在排队许多使用排队系统的切换类,因此即使在鼠标停止后,动画仍将继续运行。
解决方案是,如果有动画正在进行,则不要添加更多切换,请尝试
var flag = false;
$('html').mousemove(function () {
if (flag) {
return;
}
flag = true;
$('html').toggleClass("change1", 1000, "easeOutSine", function () {
flag = false;
});
})
演示:小提琴
另一种是使用:动画选择器
var $html = $('html').mousemove(function () {
if ($html.is(':animated')) {
return;
}
$('html').toggleClass("change1", 1000, "easeOutSine");
})
演示:小提琴
就实际解决问题而言,Arun P Johny的答案可能是最好的,但是它并没有深入探讨它为什么会发生。
这就是问题发生的原因:
每次鼠标位置更新时(每秒几次,除非您有严重的滞后;我假设更新之间的间隔为 1/16 秒),它会在需要执行的动画列表的末尾添加一个新动画。然后,当您停止移动鼠标时,队列中仍然保留了许多动画,每个动画需要整整一秒钟。它每移动鼠标 1/16 秒在动画时间上增加一秒。因此,如果您移动它一秒钟,则动画将在您开始后的 16 秒停止。
这是通过确保在旧动画完成之前不添加新动画来解决的。
相关文章:
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- D3.js:如何在svg上移动鼠标时创建弹出事件
- 为什么当我快速移动鼠标时,我的jQuery会崩溃
- 单击链接时加载移动鼠标光标 3-4 秒
- HTML 表在 TD 之间移动鼠标时触发鼠标输出
- 计算用户使用JS/Jquery滚动和移动鼠标的次数
- 如何使用JavaScript移动鼠标指针
- HTML5画布:如果在画布上移动鼠标时按下了鼠标按钮,则进行检测
- 通过jQuery或JS移动鼠标
- 引导程序 3 日期选取器 v4:移动鼠标时自动选择自定义周
- 无法检测在移动鼠标时按下的鼠标按钮
- 移动鼠标以触发CasperJS中的悬停事件
- 移动鼠标时更改视频的时间
- 当我按住鼠标按钮移动鼠标时,Fabric.js–元素是未定义的
- 当don't移动鼠标并在移动时出现
- 没有jquery的移动鼠标悬停事件
- 火狐在重型JS上崩溃,除非我移动鼠标
- jQuery点击事件只在移动鼠标后工作
- Javascript / jQuery在弹出窗口后检测悬停元素&不移动鼠标
- 如何绘制签名(点击,保持和移动鼠标)使用javascript