Как сделать синхронную анимацию
У меня есть два блока, на каждом есть анимация вращения блока, в чем суть вопроса, на одной анимации 2 оборота вокруг себя, а во втором 3, и получается что они крутятся не синхронно, как это исправить ?
.bronzone {
animation: swapcartsvip 2s forwards;
height: 200px;
width: 200px;
background: linear-gradient(78.09deg, #67331A 0%, #763C21 20.83%, #A8775E 51.56%, #CFBAAE 69.27%, #72361A 100%);
}
.bronztwo {
margin-top: 20px;
animation: swapcartsvips 2.8s forwards;
height: 200px;
width: 200px;
background: linear-gradient(78.09deg, #67331A 0%, #763C21 20.83%, #A8775E 51.56%, #CFBAAE 69.27%, #72361A 100%);
}
@keyframes swapcartsvip {
0% {
transform: matrix(1, 0, 0, 1, 0, 0);
}
25% {
transform: matrix(-1, 0, 0, 1, 0, 0);
}
50% {
transform: matrix(1, 0, 0, 1, 0, 0);
}
75% {
transform: matrix(-1, 0, 0, 1, 0, 0);
}
90% {
opacity: 1;
}
100% {
opacity: 0.15;
transform: matrix(1, 0, 0, 1, 0, 0);
}
}
@keyframes swapcartsvips {
0% {
transform: matrix(1, 0, 0, 1, 0, 0);
}
10% {
transform: matrix(-1, 0, 0, 1, 0, 0);
}
25% {
transform: matrix(1, 0, 0, 1, 0, 0);
}
50% {
transform: matrix(-1, 0, 0, 1, 0, 0);
}
65% {
transform: matrix(1, 0, 0, 1, 0, 0);
}
80% {
transform: matrix(-1, 0, 0, 1, 0, 0);
}
90% {
opacity: 1;
}
100% {
opacity: 0.15;
transform: matrix(1, 0, 0, 1, 0, 0);
}
}
<div class="bronzone"></div>
<div class="bronztwo"></div>
Ответы (1 шт):
Автор решения: Daniil Loban
→ Ссылка
По сути если анимация начинается одновременно, то можно на окончании анимации убирать элемент, получиться что они будут убираться последовательно из-за разницы в длительности анимаций, но не понятно что нужно было исправить, поэтому этот ответ в качестве одного из возможных решений:
document.querySelector('.bronzone').addEventListener('animationend', ({target}) => {target.remove()} , {once:true})
document.querySelector('.bronztwo').addEventListener('animationend', ({target}) => {target.remove()} , {once:true})
.bronzone {
font-size: 42px;
color: white;
animation: swapcartsvip 2s forwards;
height: 100px;
width: 100px;
background: linear-gradient(78.09deg, #67331A 0%, #763C21 20.83%, #A8775E 51.56%, #CFBAAE 69.27%, #72361A 100%);
}
.bronztwo {
font-size: 42px;
color: white;
margin-top: 20px;
animation: swapcartsvips 2.8s forwards;
height: 100px;
width: 100px;
background: linear-gradient(78.09deg, #67331A 0%, #763C21 20.83%, #A8775E 51.56%, #CFBAAE 69.27%, #72361A 100%);
}
@keyframes swapcartsvip {
0% {
transform: matrix(1, 0, 0, 1, 0, 0);
}
25% {
transform: matrix(-1, 0, 0, 1, 0, 0);
}
50% {
transform: matrix(1, 0, 0, 1, 0, 0);
}
75% {
transform: matrix(-1, 0, 0, 1, 0, 0);
}
90% {
opacity: 1;
}
100% {
opacity: 0.15;
transform: matrix(1, 0, 0, 1, 0, 0);
}
}
@keyframes swapcartsvips {
0% {
transform: matrix(1, 0, 0, 1, 0, 0);
}
10% {
transform: matrix(-1, 0, 0, 1, 0, 0);
}
25% {
transform: matrix(1, 0, 0, 1, 0, 0);
}
50% {
transform: matrix(-1, 0, 0, 1, 0, 0);
}
65% {
transform: matrix(1, 0, 0, 1, 0, 0);
}
80% {
transform: matrix(-1, 0, 0, 1, 0, 0);
}
90% {
opacity: 1;
}
100% {
opacity: 0.15;
transform: matrix(1, 0, 0, 1, 0, 0);
}
}
<div class="bronzone">1</div>
<div class="bronztwo">2</div>
Второй вариант:
Здесь за счет пересчета времени ключевых кадров анимации достигнута синхронность вращения обоих блоков.
console.log(Array.from(Array(6)).map((e, i) => (i * 100 /6).toFixed(2)).join(', '))
.bronzone {
font-size: 42px;
color: white;
animation: swapcartsvip 2s forwards;
height: 100px;
width: 100px;
background: linear-gradient(78.09deg, #67331A 0%, #763C21 20.83%, #A8775E 51.56%, #CFBAAE 69.27%, #72361A 100%);
}
.bronztwo {
font-size: 42px;
color: white;
margin-top: 20px;
animation: swapcartsvips 3s forwards;
height: 100px;
width: 100px;
background: linear-gradient(78.09deg, #67331A 0%, #763C21 20.83%, #A8775E 51.56%, #CFBAAE 69.27%, #72361A 100%);
}
@keyframes swapcartsvip {
0% {
transform: matrix(1, 0, 0, 1, 0, 0);
}
25% {
transform: matrix(-1, 0, 0, 1, 0, 0);
}
50% {
transform: matrix(1, 0, 0, 1, 0, 0);
}
75% {
transform: matrix(-1, 0, 0, 1, 0, 0);
}
90% {
opacity: 1;
}
100% {
opacity: 0.15;
transform: matrix(1, 0, 0, 1, 0, 0);
}
}
@keyframes swapcartsvips {
0% {
transform: matrix(1, 0, 0, 1, 0, 0);
}
16.6% {
transform: matrix(-1, 0, 0, 1, 0, 0);
}
33.3% {
transform: matrix(1, 0, 0, 1, 0, 0);
}
50% {
transform: matrix(-1, 0, 0, 1, 0, 0);
}
66.6% {
transform: matrix(1, 0, 0, 1, 0, 0);
}
83.3% {
transform: matrix(-1, 0, 0, 1, 0, 0);
}
83.3% {
opacity: 1;
}
100% {
opacity: 0.15;
transform: matrix(1, 0, 0, 1, 0, 0);
}
}
<div class="bronzone">1</div>
<div class="bronztwo">2</div>