当鼠标不再悬停在悬停动画上时,悬停动画会立即停止吗?

Posted

技术标签:

【中文标题】当鼠标不再悬停在悬停动画上时,悬停动画会立即停止吗?【英文标题】:Hover animation stops immediately when the mouse is no longer hovering over it? 【发布时间】:2014-09-22 05:36:25 【问题描述】:

我有一个带有摆动动画的图像,当鼠标悬停在它上面时它会被激活,并且应该持续大约一秒钟。如果鼠标停留在图像上,它会完美运行并持续一段时间。但是,如果我将鼠标从图像上移开,它会猛地回到原位并且不会完成动画。如果鼠标仍然悬停在它上面,我怎样才能让它继续动画然后停止?

html

<img class="animated wobble" src="image/elephant.png"/>

CSS:

.animated 
  -webkit-animation-duration: 1s;
  animation-duration: 1s;
  -webkit-animation-fill-mode: both;
  animation-fill-mode: both;


.animated.infinite 
  -webkit-animation-iteration-count: infinite;
  animation-iteration-count: infinite;


.animated.hinge 
  -webkit-animation-duration: 2s;
  animation-duration: 2s;


@-webkit-keyframes wobble 
  0% 
    -webkit-transform: none;
    transform: none;
  

  15% 
    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
  

  30% 
    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
  

  45% 
    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
  

  60% 
    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
  

  75% 
    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
  

  100% 
    -webkit-transform: none;
    transform: none;
  


@keyframes wobble 
  0% 
    -webkit-transform: none;
    -ms-transform: none;
    transform: none;
  

  15% 
    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
    -ms-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
  

  30% 
    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
    -ms-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
  

  45% 
    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
    -ms-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
  

  60% 
    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
    -ms-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
  

  75% 
    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
    -ms-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
  

  100% 
    -webkit-transform: none;
    -ms-transform: none;
    transform: none;
  


.wobble:hover 
  -webkit-animation-name: wobble;
  animation-name: wobble;

【问题讨论】:

你用 jquery 试过了吗? 这是 ***.com/questions/7694323/… 的副本 --- 它提供了 javascript 和 css 解决方案(未确认)。 也与***.com/questions/22822249/… 相关——本质上是相同的问题,而且使用纯 CSS 似乎没有解决方案。 我尝试了第一个链接,代码有很大不同。我对 JavaScript 的了解不够,无法将其添加到我的代码中。 【参考方案1】:

SOLUTION

HTML

<!DOCTYPE html>
<html>
  <head>
    <script src="//code.jquery.com/jquery-git1.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
      <meta charset="utf-8">
      <title>JS Bin</title>
  </head>
  <body>
    <img class="animated" src="http://placehold.it/350x250"/>
  </body>
</html>

JS

$(".animated").bind("webkitAnimationEnd mozAnimationEnd animationEnd", function()
  $(this).removeClass("wobble")  
).hover(function()
  $(this).addClass("wobble");        
);

CSS

.wobble 
  animation-duration: 1s;
  animation-fill-mode: both;
  animation-name: wobble;


@keyframes wobble 
  0%, 100% 
    transform: none;
  

  15% 
    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
  

  30% 
    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
  

  45% 
    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
  

  60% 
    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
  

  75% 
    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
  


【讨论】:

以上是关于当鼠标不再悬停在悬停动画上时,悬停动画会立即停止吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在鼠标悬停在图像上时暂停动画

jQuery - 当鼠标悬停在元素上时,如何继续动画?

当鼠标悬停在另一个 Div 上时为一个 Div 设置动画

将鼠标悬停在css上时如何暂停幻灯片自动播放?

悬停时停止 CSS 动画

不悬停时的CSS动画