Кратко выделите текст при вводе

У меня есть таблица 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);
})

Есть несколько возможностей здесь.

wazz 04.07.2018 06:46
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
149
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Думаю, у меня есть кое-что для тебя. Я не уверен, что расчет находится в лучшем месте, но он работает. Осторожно: я добавил класс 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;?

dactyrafficle 04.07.2018 22:33

В этом контексте для меня это тоже ново. Я нашел это, и это похоже на объяснение vg. (Человек с вопросом на самом деле ссылается на ту же статью css-tricks.)

wazz 05.07.2018 00:22

Это интересно. Мне все еще интересно узнать об этой строке кода, но вы решили мою проблему, и я получил желаемый результат в моем небольшом расчетном проекте. Кроме того, мне даже не пришлось добавлять glow к тегам с самого начала, но я думаю, что мне это больше нравится. Вот рабочий пример с желаемыми результатами: jsfiddle.net/r9h8xfuy/5

dactyrafficle 05.07.2018 02:40

Другие вопросы по теме