Я не могу проиграть несколько анимаций одну за другой с "плавным" эффектом:
#circle {
border-radius: 50%;
background: red;
animation: zoomIn 1s, pulse 0.5s ease 1s;
height: 100px;
width: 100px;
}
@keyframes zoomIn {
0% {
transform: scale(0);
}
100% {
transform: scale(1);
}
}
@keyframes pulse {
from {
transform: scale(1);
}
100% {
transform: scale(1.1);
}
}<div id = "circle"></div>Я делаю что-то неправильно? Я хочу держать ключевые кадры отдельно.
Пожалуйста, поясните, как вы хотите, чтобы ваш код вел себя и как он в настоящее время не соответствует этому.






Возможно, вам придется рассмотреть forwards на втором, чтобы сохранить его последнее состояние, потому что на самом деле, когда обе анимации заканчиваются, ваш элемент возвращается к начальному значению масштабного преобразования, которое составляет scale(1)(точнее это transform:none)
#circle {
border-radius: 50%;
background: red;
animation: zoomIn 1s, pulse 0.5s ease 1s forwards;
height: 100px;
width: 100px;
}
@keyframes zoomIn {
0% {
transform: scale(0);
}
100% {
transform: scale(1);
}
}
@keyframes pulse {
from {
transform: scale(1);
}
100% {
transform: scale(1.5);
}
}<div id = "circle"></div>ОБНОВИТЬ
Время ожидания связано с используемым animation-timing-function, который является ease для обоих, и это означает, что у вас будет замедление (медленное в конце) и замедление (медленное в начале), которые создают такое поведение пауза между обеими анимациями. . Если вы измените первый на ease-in, а последний на ease-out, у вас не будет этой проблемы.
#circle {
border-radius: 50%;
background: red;
animation: zoomIn 1s ease-in, pulse 0.5s ease-out 1s forwards;
height: 100px;
width: 100px;
}
@keyframes zoomIn {
0% {
transform: scale(0);
}
100% {
transform: scale(1);
}
}
@keyframes pulse {
from {
transform: scale(1);
}
100% {
transform: scale(1.5);
}
}<div id = "circle"></div>Проблема заключается в времени паузы между двумя анимациями, даже если вторая анимация воспроизводится быстро, мы видим очень короткую остановку между ними.
Анимация пульса заканчивается на масштабе 1,1, а затем круг возвращается к масштабу 1. Возможно, ключевые кадры пульса должны быть следующими:
@keyframes pulse {
from {
transform: scale(1);
}
50% {
transform: scale(1.1);
}
100% {
transform: scale(1);
}
}
В приведенном ниже фрагменте вы не видите привязки, но, может быть, это не тот эффект, который вы искали?
#circle {
border-radius: 50%;
background: red;
animation: zoomIn 1s, pulse 0.5s ease 1s;
height: 100px;
width: 100px;
}
@keyframes zoomIn {
0% {
transform: scale(0);
}
100% {
transform: scale(1);
}
}
@keyframes pulse {
from {
transform: scale(1);
}
50% {
transform: scale(1.1);
}
100% {
transform: scale(1);
}
}<div id = "circle"></div>Вам нужен короткий импульс в конце, когда ваш круг масштабируется до 1, я полагаю, это ваш эффект плавности. Вместо того, чтобы использовать разные анимации, почему бы нам немного не настроить ключевые кадры в анимации ZoomIn.
HTML:
<div id = "circle"></div>
CSS:
#circle {
border-radius: 50%;
background: red;
animation: zoomIn 0.4s ease-out;
height: 100px;
width: 100px;
}
@keyframes zoomIn {
0% {
transform: scale(0);
}
60% {
transform: scale(1);
}
80% {
transform: scale(1.1);
}
100% {
transform: scale(1);
}
}
Надеюсь это поможет.
единственная анимация - «Преобразование», лучше всего использовать настройку «функции времени», я рекомендую утилиту «Кубик-Безье» зайти на этот сайт http://cubic-bezier.com и попрактиковаться. Прочтите перед этим что-нибудь о кривой Безье.
#circle {
border-radius: 50%;
background: red;
animation: zoomIn 1s cubic-bezier(.4,.17,.49,1.54);
height: 100px;
width: 100px;
}
@keyframes zoomIn {
0% {
transform: scale(0);
}
100% {
transform: scale(1);
}
}<div id = "circle"></div>ОБНОВИТЬ
или эта другая "временная функция"
#circle {
border-radius: 50%;
background: red;
animation: zoomIn 1.5s cubic-bezier(.56,1,.92,.7);
height: 100px;
width: 100px;
animation-fill-mode: forwards; /* */
}
@keyframes zoomIn {
0% {
transform: scale(0);
}
100% {
transform: scale(1.1);
}
}<div id = "circle"></div>
Дайте определение «эффект текучести».