Я хочу скрыть модалы, используя обратную анимацию, по которой они появились.
Пока что стратегия, которую я придумал, заключается в создании CSS-правил с «обратным» аналогом:
.modal-animate-zoom {
animation: animatezoom 0.77s;
}
.modal-animate-zoom-reverse {
animation: animatezoom-reverse 0.77s;
}
@keyframes animatezoom {
from {transform: scale(0)}
to {transform: scale(1)}
}
@keyframes animatezoom-reverse {
from {transform: scale(1)}
to {transform: scale(0)}
}
И делать что-то подобное в JavaScript, когда я хочу скрыть модальное:
modal.classList.remove('modal-animate-popup')
modal.classList.add('modal-animate-popup-reverse')
// modalsList is the children of parent container
setTimeout(_ => { modalsList.removeChild(modal); }, 770)
Это работает. Проблемы, с которыми я сталкиваюсь:
- В CSS много дублирования (вы не можете назвать это кодом, но оно в моей базе кода, и у меня не будет тупого дублирования, которого я могу избежать)
- Время ожидания в JS должно соответствовать продолжительности анимации, и, очевидно, я не хочу дублировать эти значения в JS и CSS.
Я думаю об этих двух вариантах:
- Приведите в порядок CSS как можно лучше (я использую SCSS) и, возможно, слушаю событие завершения перехода в JavaScript
- Использование CSSOM для установки стилей, получение значения тайм-аута из переменной JS (но тогда я не уверен, что смогу использовать что-то вроде autoprefixer, но, возможно, мой код Js может это сделать?)
Кто-нибудь может порекомендовать тот или иной путь или альтернативное решение?