假设您有一个 @keyframe 动画,它可以将元素动画到屏幕的另一侧。从左侧边缘到右侧边缘。您将其应用于多个元素。但您不希望所有元素都从完全相同的位置开始。
您可以更改animation-delay
,以便它们在不同的时间开始,但它们仍然会从相同的位置开始。
幸运的是,有一种方法。
诀窍是使用负animation-delay
。这将立即开始动画,但就像动画的一部分已经运行过一样。
例如,这里有三个元素
<div class="thing thing-1"></div>
<div class="thing thing-2"></div>
<div class="thing thing-3"></div>
它们宽 300px。我们将把它们动画到屏幕的另一侧
@keyframes moveAcross {
0% {
left: -300px;
}
100% {
left: 100%;
}
}
它们都使用此动画,这意味着它们都将从相同的位置开始
.thing {
width: 300px;
position: absolute;
top: 0;
left: 0;
animation: moveAcross 10s linear infinite;
}

要更改它们在关键帧时间线上开始的不同位置,我们应用这些负延迟
.thing-1 {
animation-delay: -1s;
}
.thing-2 {
animation-delay: -2s;
}
.thing-3 {
animation-delay: -3s;
}
另一个小技巧:要测试这些起始位置,只需停止动画(您基本上只会看到第一帧)
.car {
...
animation-play-state: paused;
}


这在非常缓慢的动画中可能最有用,在这些动画中,直接延迟会导致什么都不显示或显示错误的内容太长时间。
为了好玩,不同的持续时间也是如此
查看 Chris Coyier 在 CodePen 上的 Pen hjbKp (@chriscoyier)。
我认为这是一个很酷的技巧,但您是否认为这是处理尝试为动画创建此类时序/定位或可能只是使用延迟调整每个动画的起始位置的好方法?在这里我并不在乎,只是想知道您的想法。
酷 :-)
animation-delay
的另一个复杂示例 → hxxp://cssdeck.com/labs/full/css3-animated-typography我的天哪!这太棒了!绝对值得更详细地探索!;)
如果您希望它们成为法拉利,请使用以下内容替换关键帧。:D :D :D :P
@keyframes moveAcross {
0% {
left: -30000px;
}
100% {
left: 110%;
}
}
我不知道,它在 Chrome 中不起作用。这很奇怪。@chris,你能告诉我如果上述方法由于某种原因不起作用,如何提高速度吗?
很棒的动画技巧。您做得很好。感谢分享。
有趣。我上周刚刚制作了一个演示此确切内容的笔。
http://codepen.io/colin/pen/nasLb
我用它来制作一个 CSS 驱动的加载微调器。
看起来它在任何地方都能工作。很棒的东西!
太棒了!
请,请,拜托不要使用
left
进行动画。我在这里有一些关于此的信息:https://css-tricks.org.cn/tale-of-animation-performance/
但要注意,这有一种教条的感觉。另一种方法,translateX,是相对于自身而不是相对于父元素的,因此很难精确地将某个东西动画到该距离,例如,如果您不知道该距离是多少。
虽然是有用的信息,但性能情况并没有像那篇文章暗示的那样那么灰暗。使用
left
进行动画在移动设备上始终会卡顿(如果您的智能手机的 CPU 来自遥远的未来,此语句可能不适用)。没错,如果您使用的是百分比值。这是一个反对将 CSS 动画用于如此动态的事物的有力论据(我将选择 CSS Transitions+JS)。在我看来,性能胜过所有这些。
我应该再次做什么,我感到困惑,可以提供输入大师,我变得像大师一样,如果我说错了,对不起,因为我不擅长说英语
我对您制作的动画感到非常惊讶,先生。我想为我的博客制作一个移动云动画。我可以做到吗?