我正在尝试构建一个无限动画,它将在每个循环结束时停止。
这是我到目前为止所做的,但animation-delay
仅在开始时起作用,在每一回合都不起作用。
span {
position: absolute;
}
@keyframes ani-a {
0% { transform: translateY(50px); opacity: 0; }
50% { transform: translateY(0px); opacity: 1; }
75% { transform: translateY(50px); opacity: 0; }
100% { transform: translateY(0px); opacity: 1; }
}
.a {
opacity: 1;
animation: ani-a 6s infinite;
animation-delay: 6s;
}
@keyframes ani-b {
0% { transform: translateY(50px); opacity: 1; }
50% { transform: translateY(0px); opacity: 0; }
75% { transform: translateY(50px); opacity: 1; }
100% { transform: translateY(0px); opacity: 0; }
}
.b {
opacity: 0;
animation: ani-b 6s infinite;
animation-delay: 6s;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class="a">A</span>
<span class="b">B</span>
答案 0 :(得分:1)
正如我在你之前发表的评论中提到的(关于类似主题),animation-delay
属性在迭代之间不会自动添加延迟(换句话说,在每次迭代结束时)。它仅适用于第一次迭代。如果你想在每次迭代之间添加延迟,那么你应该在它们之间使用虚拟关键帧(对于你的情况,还需要animation-delay
)。
在下面给出的代码中,会发生以下情况:
如果在动画的开始和结束时出现延迟,则应进行以下更改:
animation-delay
设置,在第一次迭代开始时引入6s延迟。span
将保持其状态,从而产生延迟的错觉。以下是完成上述更改的示例代码段。
span {
position: absolute;
}
@keyframes ani-a {
0% {
transform: translateY(50px);
opacity: 0;
}
25% {
transform: translateY(0px);
opacity: 1;
}
37.5% {
transform: translateY(50px);
opacity: 0;
}
50% {
transform: translateY(0px);
opacity: 1;
}
100% {
transform: translateY(0px);
opacity: 1;
}
}
.a {
opacity: 1;
animation: ani-a 12s infinite;
animation-delay: 6s;
}
@keyframes ani-b {
0% {
transform: translateY(50px);
opacity: 1;
}
25% {
transform: translateY(0px);
opacity: 0;
}
37.5% {
transform: translateY(50px);
opacity: 1;
}
50% {
transform: translateY(0px);
opacity: 0;
}
100% {
transform: translateY(0px);
opacity: 0;
}
}
.b {
opacity: 0;
animation: ani-b 12s infinite;
animation-delay: 6s;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class="a">A</span>
<span class="b">B</span>