У меня есть таблица html, в которой указывается размер (длина / ширина / высота / объем) по сравнению с метрикой (дюйм / фут / см / м). Каждый элемент td содержит элемент ввода. Когда вы меняете значение, остальные в таблице пересчитываются на основе нового значения. Вот рабочий пример:
http://jsfiddle.net/r9h8xfuy/1/
При изменении значения не все ячейки в таблице затрагиваются. Поэтому я хотел привлечь внимание к тем, на которые влияет, заставив их немного мигать.
Этот гораздо более простой пример раскрывает для меня суть дела:
http://jsfiddle.net/cft7n6ej/6/
Проблема заключается в том, что, хотя прослушиватель событий input делает именно то, что я хочу, с точки зрения пересчета значений таблицы, он плохо работает с функцией, которую я написал: glowText(element). А может моя функция воняет!
Я написал glowText(element), думая, что будет выполняться следующая логика:
Я ввожу значение, которое фиксируется прослушивателем событий input. В качестве аргумента элемента в glowText добавлен класс glow. Когда я открываю консоль, я вижу, что рассматриваемый элемент может иметь много классов свечения, отсюда и пространство в element.className += ' glow';. Теперь, каждый раз, когда я добавляю класс glow, должна запускаться css-анимация. Но я надеялся, что он переопределит существующие анимации, но, похоже, этого не происходит. В любом случае, как только анимация css завершена, класс glow удаляется из элемента.
Результат, который я хотел бы, такой:
Всякий раз, когда запускается прослушиватель событий input, css-анимация glow запускается с самого начала, переопределяя любую запущенную в данный момент css-анимацию glow.
Краткое редактирование: Мне интересно, может ли возможное решение заключаться в прекращении текущей запущенной анимации css перед запуском следующей? Возможно ли это?
Вот ключевой момент CSS:
@keyframes glow {
0% {
color: rgb(255,40,180);
font-weight: 900;
text-shadow: 0px 0px 20px rgb(255,140,180);
}
50% {
color: rgb(255,40,180);
font-weight: normal;
text-shadow: none;
}
100% {
color: black;
}
}
.glow {
animation: glow 1s ease-out 0s 1;
-webkit-animation: glow 1s ease-out 0s 1;
}
Javascript:
function glowText(element) {
element.className += ' glow';
element.addEventListener('animationend', function() {
this.classList.remove('glow');
});
}
var myInput = document.getElementById('myInput');
var myOutput = document.getElementById('myOutput')
myInput.addEventListener('input', function() {
myOutput.textContent = myInput.value*2;
glowText(myOutput);
})



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Думаю, у меня есть кое-что для тебя. Я не уверен, что расчет находится в лучшем месте, но он работает. Осторожно: я добавил класс glow к выходному p.
var myInput = document.getElementById('myInput');
var myOutput = document.getElementById('myOutput');
myInput.addEventListener('input', function(e) {
myOutput.textContent = myInput.value * 2;
myOutput.classList.remove("glow");
void myOutput.offsetWidth;
myOutput.classList.add("glow");
}, false);@keyframes glow {
0% {
color: rgb(255, 40, 180);
font-weight: 900;
text-shadow: 0px 0px 20px rgb(255, 140, 180), 0px 0px 2px rgb(255, 40, 180);
}
50% {
color: rgb(255, 40, 180);
font-weight: normal;
text-shadow: none;
}
100% {
color: black;
}
}
.glow {
animation: glow 1s ease-out 0s 1;
-webkit-animation: glow 1s ease-out 0s 1;
}<body>
<input type='text' id='myInput' value='5' />
<p id='myOutput' class='glow'>
25
</p>
</body>Это интересно, потому что результат - это то, что мне нужно. Таким образом, тег p начинается с класса glow, и когда пользователь запускает прослушиватель событий input, класс glow удаляется, а затем добавляется обратно, вызывая анимацию. Что делает эта строка: void myOutput.offsetWidth;?
В этом контексте для меня это тоже ново. Я нашел это, и это похоже на объяснение vg. (Человек с вопросом на самом деле ссылается на ту же статью css-tricks.)
Это интересно. Мне все еще интересно узнать об этой строке кода, но вы решили мою проблему, и я получил желаемый результат в моем небольшом расчетном проекте. Кроме того, мне даже не пришлось добавлять glow к тегам с самого начала, но я думаю, что мне это больше нравится. Вот рабочий пример с желаемыми результатами: jsfiddle.net/r9h8xfuy/5
Есть несколько возможностей здесь.