Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.05.2020, 21:58
Аватар для nastya97core
Аспирант
Отправить личное сообщение для nastya97core Посмотреть профиль Найти все сообщения от nastya97core
 
Регистрация: 04.04.2020
Сообщений: 60

Почему при удалении и добавлении класса css анимация не повторяется?
Здравствуйте. Почему анимация не повторяется при каждом нажатии? И как сделать, чтоб анимация повторилась?
https://jsfiddle.net/nastya97core/x7rbem1o/

В жизни у меня немного другая картина:
Есть форма и есть валидация полей на js. При нажатии на отправку формы, поля, которые не прошли валидацию должны быть анимированы. При повтором нажатии, анимация должна повториться. И в итоге у меня после нажатие на отправку формы удаляется класс, затем валидация и класс снова добавляется, однако анимации нет...
Ответить с цитированием
  #2 (permalink)  
Старый 06.05.2020, 22:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

nastya97core,
два варианта простых решения
что - то измерить на странице, перед добавлением класса.
или перенести добавление в setTimeout.
есть третий но я его не знаю ))).

Последний раз редактировалось рони, 06.05.2020 в 22:35.
Ответить с цитированием
  #3 (permalink)  
Старый 06.05.2020, 22:36
Аватар для nastya97core
Аспирант
Отправить личное сообщение для nastya97core Посмотреть профиль Найти все сообщения от nastya97core
 
Регистрация: 04.04.2020
Сообщений: 60

рони,
но этож какое-то намеренное замедление работы. Зачем что-то считать, когда считать не нужно?) setTimeout тоже как-то странно. А если бы у меня таких 10 моментов было, то привет задержка в 1 секунду?

Потом люди жалуются: чё это у нас так всё медленно работает, а это оказывается код из setTimeout состоит. Не удивлюсь, если в android или ios такое есть...
Ответить с цитированием
  #4 (permalink)  
Старый 06.05.2020, 22:37
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Сообщение от nastya97core
Почему
потому что не было у страницы времени нарисовать состояние без класса.
Ответить с цитированием
  #5 (permalink)  
Старый 06.05.2020, 22:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Сообщение от nastya97core
то привет задержка в 1 секунду?
так не ставьте никакой задержки, браузер успеет нарисовать
Ответить с цитированием
  #6 (permalink)  
Старый 06.05.2020, 22:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Сообщение от nastya97core
А если бы у меня таких 10 моментов было
тогда нужно 10 переменных. или перенести активацию на форму. а не на 10 элементов.
Ответить с цитированием
  #7 (permalink)  
Старый 06.05.2020, 22:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

вариант добавления класса с помощью setTimeout
Сообщение от nastya97core
А если бы у меня таких 10 моментов
<!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>
Ответить с цитированием
  #8 (permalink)  
Старый 06.05.2020, 22:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

вариант добавления класса с помощью измерения
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>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование классов в JavaScript devote Ваши сайты и скрипты 70 01.02.2013 17:17
Почему скрипт отрабатывает в IE только при первом входе на сайт? tygeddar Элементы интерфейса 3 20.09.2012 01:37
Подключение другого CSS при выводе через IFRAME Smokvin Events/DOM/Window 7 16.07.2012 12:03
Гостевая Ajax + php не обнавляется при добавлении сообщения onuvidelsolnce AJAX и COMET 6 27.11.2011 21:47
Анимация. Помогите понять почему не работает. kadurban jQuery 4 08.07.2010 20:50