假设您希望动画运行 1 秒,然后延迟 4 秒再运行。 看起来很简单。 事实并非如此,但可行。 您需要伪造它。
不
有一个 animation-delay
属性,但这对我们没有帮助。 这样会延迟动画的开始,但动画开始后就会连续运行。
解决方案:没有变化的关键帧
您需要进行一些心算
我希望动画运行 1 秒。
~ 加上 ~
我希望动画在每次迭代之间延迟 4 秒。
~ 等于 ~
总共 5 秒
因此,当您调用关键帧动画时,您使用总秒数
.mover {
animation: move 5s infinite;
}
但现在我们的 @keyframes 将运行 5 秒
@keyframes move {
/* this will happen over 5 seconds */
}
因此,为了使我们的动画只运行 1 秒,您需要让更改在 1/5 的时间内发生,即 20%。 从语言上讲,看起来像这样
@keyframes move {
0% {
transform: translate(0, 0);
}
/* Finish changes by here */
20% {
transform: translate(200px, 0);
}
/* Between 20% and 100%, nothing changes */
100% {
transform: translate(200px, 0);
}
}
我们可以使用更少的代码来编写,因为 0% 的值是假设的,您可以用逗号分隔关键帧步骤
@keyframes move {
20%, 100% {
transform: translate(200px, 0);
}
}
您可以随意使用关键帧,您只需要记住在动画的最后一步和 100% 之间将所有内容设置成完全相同。
演示
查看 CodePen 上 Chris Coyier 的 关键帧与动画迭代之间的延迟。
我已经编写了一个工具来帮助解决这个问题:https://waitanimate.wstone.io/。 这是一个很好的例子,说明了 WAIT! Animate 可以解决什么问题。
waitanimate
是一个不错的工具!过去,我正是用这种方式制作了纯 CSS 连续滑块。
这是一个很棒的解决方案,Chris,但当需要将多个动画链接在一起时,就会变得很乱。 然后,处理时间需要对特定组件的所有动画进行重构。 幸运的是,我们有一个 Web 动画 API,它允许我们创建顺序动画。 我之前发布过关于 WAAPI 的介绍,其中包含分组和顺序动画的示例。
https://pawelgrzybek.com/intro-to-the-web-animations-api/
感谢分享,因为它使用的是 JS,对某些人来说可能更优雅,但文章中的方法仍然具有新颖性和价值,如果由于任何原因 JS 不可用,可以使用它。
我真正想看到的是 web 动画 API 与 CSS 动画的电池续航时间性能/影响。 我很确定,正如您所说,这更多是复杂性问题,但也可能是脚本版本在可以选择不太复杂的动画时会消耗更多资源。
实际上,我在之前的一个项目中需要这种行为,并且还发现 animation-delay 的工作方式并不完全符合我的预期。 伟大的文章! 干杯
喜欢这个教程,我希望他们能让动画延迟在整个时间内而不是仅仅在第一次生效。 不过我喜欢这种解决方法,做得很好。