CSS анимация, как замедлить итерации?
У меня есть следующий класс, содержащий анимацию. То, что я хотел бы сделать, это постепенно замедлять продолжительность каждой итерации. Например, первая итерация должна быть 150 мс, следующая - 200 мс, следующая - 250 мс и т. Д. Как мне этого добиться?
.shoot-bullet {
animation: shoot-bullet;
animation-duration: 150ms;
animation-iteration-count: 8;
}
@keyframes shoot-bullet {
0% { transform: scale(1.8, 0.8) }
100% { transform: scale (1, 1) }
}
2 ответа
Решение
Одна идея состоит в том, чтобы просто использовать несколько анимаций. Конечно, если вы хотите более 100 итераций, это не будет лучшим решением, если вы не подумаете о SASS/LESS для генерации кода.
Вот пример. Задержка каждого должна быть задержка + продолжительность предыдущего
.box {
width: 50px;
height: 50px;
margin:50px;
background: red;
animation:
shoot-bullet 100ms linear 0,
shoot-bullet 400ms linear 100ms reverse,
shoot-bullet 800ms linear 500ms,
shoot-bullet 1200ms linear 1300ms reverse,
shoot-bullet 1600ms linear 2500ms,
shoot-bullet 2000ms linear 4100ms reverse,
shoot-bullet 2400ms linear 6100ms;
}
@keyframes shoot-bullet {
0% {
transform: scale(1.8, 0.8)
}
100% {
transform: scale(1, 1)
}
}
<div class="box"></div>
Чтобы избежать использования реверса, сделайте анимацию, чтобы первое и последнее состояние были одинаковыми:
.box {
width: 50px;
height: 50px;
margin:50px;
background: red;
animation:
shoot-bullet 100ms linear 0,
shoot-bullet 400ms linear 100ms,
shoot-bullet 800ms linear 500ms,
shoot-bullet 1200ms linear 1300ms,
shoot-bullet 1600ms linear 2500ms,
shoot-bullet 2000ms linear 4100ms,
shoot-bullet 2400ms linear 6100ms;
}
@keyframes shoot-bullet {
0%,100% {
transform: scale(1, 1)
}
50% {
transform: scale(1.8, 0.8)
}
}
<div class="box"></div>
Ты можешь попробовать
animation: shoot-bullet 150ms linear 0, shoot-bullet 200ms linear 150ms, shoot-bullet 250ms linear 350ms, ...;
надеюсь, это поможет