#css #анимация #css_animation #keyframes
В этом примере все достаточно очевидно и отрабатывает правильно
$('div').click(function() {
$('div').toggleClass('wide');
});
div {
width: 80px;
height: 30px;
background-color: green;
transition: all 0.4s ease-in-out;
}
.wide {
width: 140px;
background-color: blue;
}
Но мне необходимо усложнить анимацию, как это сделать правильно?
При добавлении keyframes анимация отрабатывает только при добавлении класса, а при
удалении все происходит без анимации.
$('div').click(function() {
$('div').toggleClass('wide');
});
div {
width: 80px;
height: 30px;
background-color: green;
transition: all 0.4s ease-in-out;
}
@keyframes blue {
50% {
background-color: blue;
}
100% {
width: 200px;
background-color: blue;
}
}
.wide {
animation-name: blue;
animation-duration: 0.4s;
animation-fill-mode: both;
}
Как мне необходимо организовать код, чтобы анимация по клику отрабатывала "в обе
стороны"?
Ответы
Ответ 1
Анимации (animation), в отличие от переходов (transition), работают только в одну сторону. Переключение направления нормально не поддерживается. Вообще-то существует свойство animation-direction, но оно не поможет, потому что, если имя анимации не меняется, то элемент продолжает "проигрывать" одну и ту же последовательность. Если изменить направление, то анимация будет всё ещё в завершённом состоянии, и просто изменится конечное значение, которое браузер и применит моментально. И удаление имени анимации animation-name не поможет, потому что в этом случае сбросится и конечное значение, что вас не устроит (animation-fill-mode у вас both). Что касается переходов, то они существуют отдельно от анимаций, анимировать одни и те же свойства двумя способами бессмысленно, а свойства переходов на анимации не влияют. Если хотите анимировать в обе стороны, то нужно использовать или анимации с двумя отдельными @keyframes для каждого направления, или переходы, которые поддерживают изменение направления. См. также: Reverse Keyframe animation with Javascript Possible to reverse a css animation on class removal?Ответ 2
Можно указывать несколько transition'ов через запятую, а также сдвигать их начало: $('div').click(function() { $('div').toggleClass('wide'); }); div { width: 80px; height: 30px; background-color: green; transition: width 4s ease-in-out, background-color 2s ease-in-out; transition-delay: 0s, 2s; } .wide { width: 380px; background-color: blue; transition-delay: 0s; } section { height: 10px; border-left: 80px silver solid; border-right: 150px silver solid; background-color: red; width: 150px; }
Комментариев нет:
Отправить комментарий