完成后如何保持CSS3动画静止,然后在鼠标消失后恢复

Posted

技术标签:

【中文标题】完成后如何保持CSS3动画静止,然后在鼠标消失后恢复【英文标题】:How to keep CSS3 Animation still after finishing, then reverting after mouse goes away 【发布时间】:2012-10-17 20:20:02 【问题描述】:

我有一个关于 CSS3 动画/变换的问题。通常情况下,我总能找到解决 CSS3 的方法——因为它非常简单,但这个问题一直给我带来麻烦。

我有一张加号的图片。当用户将鼠标悬停在加号上时,它会旋转 360 度,并且图片会变为减号。一切都运行良好,除了动画结束时它会迅速恢复为加号;我希望它保持在减号上,直到鼠标悬停,然后它可以回到加号。

这是我的代码:

#lock-screen #time-section .unlock 
    cursor: pointer;
    display: block;
    height: 22px;
    width: 23px;
    background-image: url('../images/metro_icon_pack/plus.png');
    background-repeat: no-repeat;
    margin-left: -15px;
    margin-top: 5px;


#lock-screen #time-section .unlock:hover 
    animation: rotate 1s;
    -o-animation: rotate 1s;
    -ms-animation: rotate 1s;
    -moz-animation: rotate 1s;
    -webkit-animation: rotate 1s;


@-webkit-keyframes rotate 
    0% 
        -webkit-transform: rotate(0deg);
    

    100% 
        -webkit-transform: rotate(360deg);
        background-image: url('../images/metro_icon_pack/minus.png');
    

现在,我意识到我只是为基于 WebKit 的浏览器(Chrome 和 Safari)提供代码。那是因为我在 Chrome 中测试它,稍后我会在获得它后添加对其他浏览器的进一步支持。

感谢您的帮助,伙计们!

【问题讨论】:

您应该始终将不带前缀的属性放在最后。目前,Firefox 支持无前缀动画,但是 unprefixed 属性不会像您编写代码那样应用,因为 -moz- 前缀在它之后并被应用。另外,虽然我完全同意答案(在这种情况下应该使用过渡),但我也认为您可能想查看 animation-fill-mode 属性 developer.mozilla.org/en-US/docs/CSS/animation-fill-mode 【参考方案1】:

我会将 minus 背景图像放在#lock-screen #time-section .unlock:hover 下,然后添加一个单秒的背景图像过渡。

另外,除了使用 0%、100% 之外,您还可以使用 from、to...

喜欢:

#lock-screen #time-section .unlock:hover 
background-image: url('../images/metro_icon_pack/minus.png');
-webkit-transition: background-image 1s;
/* Other -vendor-transitions go here */

Demo.

我也会使用变换方法而不是动画,只使用过渡(您还可以将元素旋转回加号)...Demo。

如果您不想将元​​素旋转回加号,只需将-webkit-transition 添加到悬停状态即可。

Demo.

【讨论】:

哇,谢谢!很好的输入,我会接受的答案。再次感谢!

以上是关于完成后如何保持CSS3动画静止,然后在鼠标消失后恢复的主要内容,如果未能解决你的问题,请参考以下文章

CSS3 动画脱离 :hover

我想让一个词在鼠标悬停期间执行 CSS 动画后消失

CSS3:动画精灵+悬停过渡

如何停止css animation动画

在背景图像动画之后创建背景颜色 CSS3 动画

UINavigationController 的背景图像在视图控制器被推送或弹出时保持静止并且不动画