Utk*_*nos 7 css animation css3 css-animations
我有一个链接的CSS动画,大多数工作正常:
#product {
background: red;
width: 10%;
height: 10%;
border: none;
left: -22%;
top: 50%;
top: 40%;
animation: product_across 2s linear, product_down 1s;
animation-delay: 0s, 2s;
}
@-moz-keyframes product_across {
from { left: -22%; }
to { left: 98%; }
}
@-moz-keyframes product_down {
from { top: 40%; left: 98%; }
to { top: 98%; left: 128.5%; }
}
Run Code Online (Sandbox Code Playgroud)
问题是,在第一个animation(product_across
)完成后,我想要应用一个样式.没有动画,只需应用它.
CSS3是否允许这样做?我想我正在寻找一种"动画结束"属性或其他东西.
目前我正在围绕它:
@-moz-keyframes product_down {
from { -moz-transform: rotate(45deg); top: 40%; left: 98%; }
to { -moz-transform: rotate(45deg); top: 98%; left: 128.5%; }
}
Run Code Online (Sandbox Code Playgroud)
......旋转是我希望应用的风格.通过将from
/ to
states 设置为此属性的相同值,它可以有效地完成我想要的操作,但我不禁想到必须有更好的方法.
您确实需要animation-fill-mode:forwards
像Fabio建议的那样使用,但这仅适用于动画中设置的属性.为了设置你想要实际动画的属性以外的属性,你必须通过将它们添加到最终来使它们成为动画的一部分,如下所示:
@keyframes {
/* ... Your original keyframes (except the last) ... */
99.99% { /* ... The original properties of something you want to change ... */ }
100% { ... Your original end properties and the changed properties ... }
}
Run Code Online (Sandbox Code Playgroud)
例如:
@keyframes rotate {
0% { transform:rotate(0deg); }
99.999% { background:blue; }
100% { transform:rotate(360deg); background:red; }
}
Run Code Online (Sandbox Code Playgroud)
通过使两个端关键帧之间的差异非常小,它将跳转到新的样式,无论它animation-duration
是什么.
获得此效果的另一种更常见的方法是使用Javascript animation-end
是的,你需要使用动画填充模式.
只需将该样式定义为最后一个关键帧,然后将其添加到#product
#product{-webkit-animation-fill-mode:forwards; animation-fill-mode:forwards;}
Run Code Online (Sandbox Code Playgroud)