Почему при удалении и добавлении класса css анимация не повторяется?
Здравствуйте. Почему анимация не повторяется при каждом нажатии? И как сделать, чтоб анимация повторилась?
https://jsfiddle.net/nastya97core/x7rbem1o/ В жизни у меня немного другая картина: Есть форма и есть валидация полей на js. При нажатии на отправку формы, поля, которые не прошли валидацию должны быть анимированы. При повтором нажатии, анимация должна повториться. И в итоге у меня после нажатие на отправку формы удаляется класс, затем валидация и класс снова добавляется, однако анимации нет... |
nastya97core,
два варианта простых решения что - то измерить на странице, перед добавлением класса. или перенести добавление в setTimeout. есть третий но я его не знаю ))). |
рони,
но этож какое-то намеренное замедление работы. Зачем что-то считать, когда считать не нужно?) setTimeout тоже как-то странно. А если бы у меня таких 10 моментов было, то привет задержка в 1 секунду? Потом люди жалуются: чё это у нас так всё медленно работает, а это оказывается код из setTimeout состоит. Не удивлюсь, если в android или ios такое есть... |
Цитата:
|
Цитата:
|
Цитата:
|
вариант добавления класса с помощью setTimeout
Цитата:
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
form.err .anima{
animation:anima 350ms backwards ease-in-out;
color: red;
}
@keyframes anima {
from {transform: translateX(0);}
20% {transform: translateX(1%);}
40% {transform: translateX(-1%);}
60% {transform: translateX(1%);}
80% {transform: translateX(-1%);}
to {transform: translateX(0);}
}
</style>
<script>
document.addEventListener( "DOMContentLoaded" , function() {
let timer;
document.querySelector("button").onclick = function(){
clearTimeout(timer);
document.querySelector("form").classList.remove("err");
timer = setTimeout(()=> document.querySelector("form").classList.add("err"))
}
});
</script>
</head>
<body>
<form action="http://">
<h1 class="anima">Анимация</h1>
<h1 class="anima">Анимация</h1>
<h1 class="anima">Анимация</h1></form>
<button>Жмай</button>
</body>
</html>
|
вариант добавления класса с помощью измерения
nastya97core,
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
.anima {
animation: anima 350ms backwards ease-in-out;
color: red;
}
@keyframes anima {
from {transform: translateX(0);}
20% {transform: translateX(1%);}
40% {transform: translateX(-1%);}
60% {transform: translateX(1%);}
80% {transform: translateX(-1%);}
to {transform: translateX(0);}
}
</style>
<script>
document.addEventListener( "DOMContentLoaded" , function() {
document.querySelector("button").onclick = function(){
document.querySelector("h1").classList.remove("anima");
document.documentElement.clientWidth;
document.querySelector("h1").classList.add("anima");
}
});
</script>
</head>
<body>
<h1>Анимация</h1>
<button>Жмай</button>
</body>
</html>
|
| Часовой пояс GMT +3, время: 07:00. |