【问题标题】:Strange unexpected delay before mouseleave animation鼠标离开动画之前奇怪的意外延迟
【发布时间】:2017-01-06 14:33:13
【问题描述】:

我目前正在尝试使用.animate() jQuery 函数悬停 div 时创建一个小动画。

如果你看一下代码 sn-p,你会发现鼠标离开 div 和动画启动之间有一个非常奇怪的延迟。

这绝对是 .animate() 函数,因为当鼠标离开 div 时会显示一个 console.log 并且没有任何奇怪的延迟。

我是否错过了什么或...任何想法将不胜感激!

谢谢!

$(document).ready(function() {
  $(".square").hover(function() {
      var _this = this;
      $(_this).find(".square-hover").eq(0).animate({
        top: "0px",
      }, 750)
    })
    $(".square").mouseleave(function() {
      var _this = this;
      console.log("mouseleave triggered");
      $(_this).find(".square-hover").eq(0).animate({
        top: "-300px",
      }, 100)
    });
})
.square {
  box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 1px 5px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.2);
  padding: 0;
  border: 1px solid rgba(255, 255, 255, 0.1);
  height: 200px;
  -webkit-transition-property: background-color;
  -webkit-transition-duration: 0.2s;
  overflow: hidden;
  margin-top: 5px
}

.square-hover{
  position: absolute;
  top: -300px;
  width: 100%;
  height: 100%;
  background-color: rgba(29, 233, 182, 0.85);
}
<script src="http://code.jquery.com/ui/1.12.0/jquery-ui.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div class="col-xs-6 col-xs-offset-3 square">
  <div class="square-hover"></div>
</div>

【问题讨论】:

  • 代码应该发布在这里

标签: jquery jquery-ui jquery-animate delay


【解决方案1】:

问题是因为您使用的是hovermouseleavehover 事件处理程序实际上是独立的 mouseentermouseleave 处理程序 - 所以你实际上附加了 1 个 mouseenter 和 2 个 mouseleave。这是您的问题的原因。

如果您更改代码以将两个函数传递给hover(第一个用于mouseenter,第二个用于mouseleave)您的代码可以工作:

$(".square").hover(function() {
    $(this).find(".square-hover").eq(0).stop(true).animate({
        top: "0px",
    }, 750)
}, function() {
    $(this).find(".square-hover").eq(0).stop(true).animate({
        top: "-300px",
    }, 100)
});

Updated fiddle

还要注意在上面使用stop(true) 以防止连续事件阻塞动画队列。

【讨论】:

  • 好多了!感谢strop(true) 的提示。
  • 似乎如果我们快速离开并进入,悬停的div会一直悬停。
  • 这很奇怪 - 这就是 stop(true) 应该防止的
  • 是的,但是试试看,如果鼠标在动画完成之前离开div,悬停的div不会回到她的初始位置(顶部:-300px)
  • 是的,你是对的。缩短版本存在逻辑问题。我会删除它。单独的功能似乎可以工作
猜你喜欢
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 2014-06-30
相关资源
最近更新 更多