Как я могу заставить две анимации CSS воспроизводиться с разной скоростью ?
- Изображение должно вращаться и увеличиваться одновременно.
- Вращение будет происходить каждые 2 секунды.
- Рост будет повторяться каждые 4 секунды.
Пример кода:
.image {
position: absolute;
top: 50%;
left: 50%;
width: 120px;
height: 120px;
margin:-60px 0 0 -60px;
-webkit-animation:spin 2s linear infinite;
-webkit-animation:scale 4s linear infinite;
}
@-webkit-keyframes spin {
100% {
transform: rotate(180deg);
}
}
@-webkit-keyframes scale {
100% {
transform: scaleX(2) scaleY(2);
}
}
http://jsfiddle.net/Ugc5g/3388/ - только одна анимация (последняя заявленная) игры.
6 ответов
TL; DR
С помощью запятой вы можете указать несколько анимаций, каждая со своими свойствами, как указано в ответе CriticalError ниже.
Пример:
animation: rotate 1s, spin 3s;
Оригинальный ответ
Здесь есть две проблемы:
# 1
-webkit-animation:spin 2s linear infinite;
-webkit-animation:scale 4s linear infinite;
Вторая строка заменяет первую. Итак, не имеет никакого эффекта.
# 2
Оба ключевых кадра применяются к одному и тому же свойству transform
В качестве альтернативы вы можете обернуть изображение в <div>
и анимировать каждое отдельно и с разной скоростью .
http://jsfiddle.net/rnrlabs/x9cu53hp/
.scaler {
position: absolute;
top: 100%;
left: 50%;
width: 120px;
height: 120px;
margin:-60px 0 0 -60px;
animation: scale 4s infinite linear;
}
.spinner {
position: relative;
top: 150px;
animation: spin 2s infinite linear;
}
@keyframes spin {
100% {
transform: rotate(180deg);
}
}
@keyframes scale {
100% {
transform: scaleX(2) scaleY(2);
}
}
<div class="spinner">
<img class="scaler" src="http://makeameme.org/media/templates/120/grumpy_cat.jpg" alt="" width="120" height="120">
<div>
animation: rotate 1s, spin 3s;
. Итак, поверните запуски, затем сделайте паузу на X секунд, а затем запустите анимацию вращения.
animation: rotate 1s forward 5s, spin 3s forward 4s;
Здесь 5 с — это задержка для анимации вращения, а 4 с — задержка для анимации вращения. @уорфдейл
Поверните эти 2 строки:
-webkit-animation:spin 2s linear infinite;
-webkit-animation:scale 4s linear infinite;
В:
-webkit-animation: spin 2s linear infinite, scale 4s linear infinite;
Вы не можете воспроизвести две анимации, так как атрибут можно определить только один раз. Скорее, почему бы вам не включить вторую анимацию в первую и не настроить ключевые кадры, чтобы правильно выбрать время?
.image {
position: absolute;
top: 50%;
left: 50%;
width: 120px;
height: 120px;
margin:-60px 0 0 -60px;
-webkit-animation:spin-scale 4s linear infinite;
}
@-webkit-keyframes spin-scale {
50%{
transform: rotate(360deg) scale(2);
}
100% {
transform: rotate(720deg) scale(1);
}
}
<img class="image" src="http://makeameme.org/media/templates/120/grumpy_cat.jpg" alt="" width="120" height="120">
Вы можете попробовать что-то вроде этого
Установите для родителя значение rotate
, а для изображения - scale
, чтобы время rotate
и scale
могло быть разным
div {
position: absolute;
top: 50%;
left: 50%;
width: 120px;
height: 120px;
margin: -60px 0 0 -60px;
-webkit-animation: spin 2s linear infinite;
}
.image {
position: absolute;
top: 50%;
left: 50%;
width: 120px;
height: 120px;
margin: -60px 0 0 -60px;
-webkit-animation: scale 4s linear infinite;
}
@-webkit-keyframes spin {
100% {
transform: rotate(180deg);
}
}
@-webkit-keyframes scale {
100% {
transform: scale(2);
}
}
<div>
<img class="image" src="http://makeameme.org/media/templates/120/grumpy_cat.jpg" alt="" width="120" height="120" />
</div>
Вы можете указать несколько анимаций, каждая со своими свойствами, через запятую.
Пример:
animation: rotate 1s, spin 3s;
animation-delay
через кому, см. этот ответ
rotate 1s 0.5s, spin 3s 10s
для задержек 0,5 и 10 с соответственно.
Вы действительно можете запускать несколько анимаций одновременно, но в вашем примере есть две проблемы. Во-первых, используемый синтаксис определяет только одну анимацию. Второе правило стиля скрывает первое. Вы можете указать две анимации, используя следующий синтаксис:
-webkit-animation-name: spin, scale
-webkit-animation-duration: 2s, 4s
Как в этой скрипке (где я заменил "scale" на "fade" из-за другой проблемы, описанной ниже ... Потерпите меня.): http://jsfiddle.net/rwaldin/fwk5bqt6/
Во-вторых, обе ваши анимации изменяют одно и то же свойство CSS (преобразование) одного и того же элемента DOM. Я не верю, что ты сможешь это сделать. Вы можете указать две анимации для разных элементов, возможно, изображения и элемента контейнера. Просто примените одну из анимаций к контейнеру, как в этой скрипке: http://jsfiddle.net/rwaldin/fwk5bqt6/2/
Похожие вопросы
Связанные вопросы
Новые вопросы
css
CSS (каскадные таблицы стилей) - это язык таблиц стилей представления, используемый для описания внешнего вида и форматирования документов HTML (язык разметки гипертекста), XML (расширяемый язык разметки) и элементов SVG, включая (но не ограничиваясь) цвета, макет, шрифты, и анимации. Также описывается, как элементы должны отображаться на экране, на бумаге, в речи или на других носителях.