悬停时如何停止当前正在运行的动画并更改样式

Posted

技术标签:

【中文标题】悬停时如何停止当前正在运行的动画并更改样式【英文标题】:How to stop the currently running animation and change styles when hovered 【发布时间】:2020-01-22 07:05:06 【问题描述】:

所以我有一个简单的标签,上面有一个联系号码,上面有一个闪烁的动画。 (下面的代码)这是一个简单的颜色过渡。

我还需要暂停动画(完成)并将默认颜色应用于文本。悬停时,动画显然会以随机颜色暂停,但不会更改为我想要的颜色。

.contact .message 
  color: inherit;
  font-size: inherit;
  display: inline;
  animation: blink 2s infinite;


.contact .message:hover 
  color: #151111;
  /* This doesn't get applied */
  animation-play-state: paused;



/* Blinking animation */

@keyframes blink 
  0% 
    color: #0590b2;
  
  50% 
    color: #151111;
  
  100% 
    color: #0590b2;
  
<div class="contact">
  <a href="tel:1234">
    <span class="message">Contact us: <strong>+1234</strong></span>
  </a>
</div>

我做错了什么?

请给我一些见解。

这里是pen

【问题讨论】:

【参考方案1】:

如果您需要比 CSS 变量更好的支持,这里还有一个技巧。只需在父级上定义动画并更改子级的颜色:

.contact a 
  animation: blink 1s infinite alternate;


.contact .message:hover 
  color:red;


/* Blinking animation */
@keyframes blink 
  0% 
    color: #0590b2;
  
  100% 
    color: #151111;
  
<div class="contact" >
    <a href="tel:1234">
        <span class="message">Contact us: <strong>+1234</strong></span>
    </a>
</div>

【讨论】:

太棒了。多谢兄弟。这很简洁。我注意到您甚至不需要暂停我在原始代码中所做的动画。看起来悬停事件优先于动画吧? @Desper 这是因为动画和悬停不在同一个元素上。默认情况下,孩子继承动画的颜色,在悬停时我会改变它的颜色。动画仍然在父级上运行,但我们什么也看不到。【参考方案2】:

我使用了 CSS 变量。

var(--value, fallback);

回退将是有效的,因为最初没有定义“值”。悬停完成后,回退无效,因为定义了“值”。

.contact .message 
  color: var(--color, inherit);
  font-size: inherit;
  display: inline;
  animation: blink 2s infinite;


.contact .message:hover 
  --color: red;
  animation-play-state: paused;


/* Blinking animation */
@keyframes blink 
  0% 
    color: var(--color, #0590b2);
  
  50% 
    color: var(--color, #151111);
  
  100% 
    color: var(--color, #0590b2);
  
<div class="contact" >
    <a href="tel:1234">
        <span class="message">Contact us: <strong>+1234</strong></span>
    </a>
</div>

【讨论】:

简直太棒了,非常感谢兄弟的快速回复。从来没有考虑过使用变量,更不用说回退值了。非常感激。 :)

以上是关于悬停时如何停止当前正在运行的动画并更改样式的主要内容,如果未能解决你的问题,请参考以下文章

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

悬停时继续 CSS3 关键帧动画/悬停时停止重复

如果动画在jQuery中停止,如何防止回调?

悬停时停止 CSS 动画

悬停时的 jQuery 动画 |非常快的传球,停止动画

JQuery中鼠标悬停和鼠标悬停时停止和继续动画的方法