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

Posted

技术标签:

【中文标题】悬停时继续 CSS3 关键帧动画/悬停时停止重复【英文标题】:Continue CSS3 Keyframes Animation on Hover / Stop Repeat on Hover 【发布时间】:2018-03-09 02:00:36 【问题描述】:

我设置了 CSS3 动画,我只想更改悬停时的框阴影颜色。但是,当我这样做时,动画会突然重置。有什么办法可以在没有跳跃的情况下继续悬停无缝动画?如果我需要使用 javascript 或 jquery,那很好,但如果有 CSS3 解决方案,我会更喜欢。任何帮助表示赞赏。

table 
    max-width:1000px!important;
    padding:15px;
    word-wrap:
    break-word;
    background-color:#ffffff;
    border: 7px solid #454ce9;
    animation: glowing 5000ms infinite;


table:hover 
    animation: glowing2 5000ms infinite;



@keyframes glowing 
    0%  box-shadow: 0 0 -10px #e9458a; 
    40%  box-shadow: 0 0 20px #e9458a; 
    60%  box-shadow: 0 0 20px #e9458a;
    100%  box-shadow: 0 0 -10px #e9458a;


@-webkit-keyframes glowing 
    0%  box-shadow: 0 0 -10px #e9458a; 
    40%  box-shadow: 0 0 20px #e9458a; 
    60%  box-shadow: 0 0 20px #e9458a;
    100%  box-shadow: 0 0 -10px #e9458a;


@keyframes glowing2 
    0%  box-shadow: 0 0 -10px #ad45e9; 
    40%  box-shadow: 0 0 20px #ad45e9; 
    60%  box-shadow: 0 0 20px #ad45e9;
    100%  box-shadow: 0 0 -10px #ad45e9;


@-webkit-keyframes glowing2 
    0%  box-shadow: 0 0 -10px #ad45e9; 
    40%  box-shadow: 0 0 20px #ad45e9; 
    60%  box-shadow: 0 0 20px #ad45e9;
    100%  box-shadow: 0 0 -10px #ad45e9;
<table border="10"><tr><td colspan="2">Hover over me</td></tr></table>

【问题讨论】:

【参考方案1】:

要做悬停动画,transition 是一个很棒的功能,可以在悬停时反转动画。

table 
    max-width:1000px!important;
    padding:15px;
    word-wrap:
    break-word;
    background-color:#ffffff;
    border: 7px solid #454ce9;
    box-shadow: 0 0 -10px #e9458a;
    transition: box-shadow 2500ms;


table:hover 
    box-shadow: 0 0 20px #e9458a;
<table border="10"><tr><td colspan="2">Hover over me</td></tr></table>

如果仍然使用animation,请使用animation-play-stateanimation-fill-mode: forwards 使其在悬停时运行并在未悬停时保持状态

在下面的示例中,我使用了它们的速记属性,尽管它们可以添加到速记中,例如 animation-fill-mode animation: glowing 5000ms infinite forwards;

我会保留animation-play-state 作为速记,因为它在 IE 上不起作用(如果我没记错的话,在旧版本的 Edge 上)。

注意,box-shadow 上的负值 <blur-radius> 是不允许的(我注意到它在 IE/Edge 上不起作用,但在 Chrome 上却可以)

table 
    max-width:1000px!important;
    padding:15px;
    word-wrap:
    break-word;
    background-color:#ffffff;
    border: 7px solid #454ce9;
    animation: glowing 5000ms infinite;
    animation-fill-mode: forwards;          /*  persist state  */
    animation-play-state: paused;           /*  pause the animation  */


table:hover 
    animation-play-state: running;           /* play the animation  */



@keyframes glowing 
    0%  box-shadow: 0 0 0px #e9458a; 
    40%  box-shadow: 0 0 20px #e9458a; 
    60%  box-shadow: 0 0 20px #e9458a;
    100%  box-shadow: 0 0 0px #e9458a;


@-webkit-keyframes glowing 
    0%  box-shadow: 0 0 0px #e9458a; 
    40%  box-shadow: 0 0 20px #e9458a; 
    60%  box-shadow: 0 0 20px #e9458a;
    100%  box-shadow: 0 0 0px #e9458a;
<table border="10"><tr><td colspan="2">Hover over me</td></tr></table>

根据评论更新

也可以在动画过程中改变颜色

table 
    max-width:1000px!important;
    padding:15px;
    word-wrap: break-word;
    background-color:#ffffff;
    border: 7px solid #454ce9;
    animation: glowing 5000ms infinite forwards;
    animation-play-state: paused;


table:hover 
    animation-play-state: running;


@keyframes glowing 
    0%  box-shadow: 0 0 0px red; 
    25%  box-shadow: 0 0 20px blue; 
    50%  box-shadow: 0 0 20px green;
    75%  box-shadow: 0 0 20px yellow;
    100%  box-shadow: 0 0 0px red;
<table border="10"><tr><td colspan="2">Hover over me</td></tr></table>

【讨论】:

谢谢!我知道我可以这样做,但我想保留关键帧动画,因为效果与简单的过渡不同,连续淡入淡出是我想要的效果。我仍然想知道这是否可能。 @Aquila 由于另一个答案删除了它的初始解决方案,我将它添加到我的解决方案中,并附上一些注释以使其在 IE/Edge 上运行。 非常感谢!这更回答了我的问题。我还想知道一件事:我是否能够使用此解决方案更改悬停时的框阴影颜色,还是 CSS 无法做到这一点? @Aquila 添加了第 3 个也会改变颜色的示例 谢谢!这回答了我的问题。【参考方案2】:

当然,一旦动画完成,用这个来阻止它跳回来

    animation-fill-mode: forwards;

这里似乎也得到了回答-CSS Keyframe Animations on Hover - Animation Resetting with Mouse Movement

【讨论】:

其他答案似乎要求与我类似的东西,但结果不是我想要的。我希望动画在悬停时保持无缝重复,而不是突然重置。我也试过你的建议,但似乎没有改变。我执行不正确吗? jsfiddle.net/Lbu18j2a

以上是关于悬停时继续 CSS3 关键帧动画/悬停时停止重复的主要内容,如果未能解决你的问题,请参考以下文章

css3关键帧悬停动画firefox

使用变换时,悬停时的 CSS 动画停留在最后一个关键帧:旋转

如何播放反向关键帧动画以悬停?

CSS3:动画精灵+悬停过渡

CSS3滤镜模糊关键帧动画

关键帧动画不适用于:moz 中的悬停元素和