@IckiSanZ

Проигрывание CSS анимации при нажатии на клавишу на клавиатуре. Как решить проблему?

Здравствуйте, есть клавиатурный тренажер, в котором под полем для ввода есть макет клавиатуры. При нажатии на клавишу в случае если keypress совпадает с буквой, которую надо ввести, на макете определенная клавиша должна мигнуть зеленым и если не совпадает - красным. Я это криво реализовал через изменение значения animation, но получается так что анимация проигрывается только один раз при первом нажатии, а при последующих ничего не происходит.
Ссылка на jsfiddle

Фрагмент HTML:
<div id="container">
    <ul id="keyboard">
        <li class="symbol"><span class="off"><b>`</b></span><span class="on">~</span></li>
        <li class="symbol"><span class="off"><b>1</b></span><span class="on">!</span></li>
        <li class="symbol"><span class="off"><b>2</b></span><span class="on">@</span></li>
        <li class="symbol"><span class="off"><b>3</b></span><span class="on">#</span></li>
        <li class="symbol"><span class="off"><b>4</b></span><span class="on">$</span></li>
        <li class="symbol"><span class="off"><b>5</b></span><span class="on">%</span></li>
        <li class="symbol"><span class="off"><b>6</b></span><span class="on">^</span></li>
        <li class="symbol"><span class="off"><b>7</b></span><span class="on">&amp;</span></li>
        <li class="symbol"><span class="off"><b>8</b></span><span class="on">*</span></li>
        <li class="symbol"><span class="off"><b>9</b></span><span class="on">(</span></li>
        <li class="symbol"><span class="off"><b>0</b></span><span class="on">)</span></li>
        <li class="symbol"><span class="off"><b>-</b></span><span class="on">_</span></li>
        <li class="symbol"><span class="off"><b>=</b></span><span class="on">+</span></li>
        <li class="delete lastitem"><b>delete</li>
        <li class="tab"><b>tab</b></li>
        <li class="letter" id="q"><b>q</b></li>
        <li class="letter" id="w"><b>w</b></li>
        <li class="letter" id="e"><b>e</b></li>
        <li class="letter" id="r"><b>r</b></li>
        <li class="letter" id="t"><b>t</b></li>
        <li class="letter" id="y"><b>y</b></li>
        <li class="letter" id="u"><b>u</b></li>
        <li class="letter" id="i"><b>i</b></li>
        <li class="letter" id="o"><b>o</b></li>
        <li class="letter" id="p"><b>p</b></li>
        <li class="symbol"><span class="off"><b>[</b></span><span class="on">{</span></li>
        <li class="symbol"><span class="off"><b>]</b></span><span class="on">}</span></li>
        <li class="symbol lastitem"><span class="off"><b>\</b></span><span class="on">|</span></li>
        <li class="capslock"><b>caps lock</b></li>
        <li class="letter" id="a"><b>a</b></li>
        <li class="letter" id="s"><b>s</b></li>
        <li class="letter" id="d"><b>d</b></li>
        <li class="letter" id="f"><b>f</b></li>
        <li class="letter" id="g"><b>g</b></li>
        <li class="letter" id="h"><b>h</b></li>
        <li class="letter" id="j"><b>j</b></li>
        <li class="letter" id="k"><b>k</b></li>
        <li class="letter" id="l"><b>l</b></li>
        <li class="symbol"><span class="off"><b>;</b></span><span class="on">:</span></li>
        <li class="symbol"><span class="off"><b>'</b></span><span class="on">&quot;</span></li>
        <li class="return lastitem"><b>enter</li>
        <li class="left-shift"><b>shift</b></li>
        <li class="letter" id="z"><b>z</b></li>
        <li class="letter" id="x"><b>x</b></li>
        <li class="letter" id="c"><b>c</b></li>
        <li class="letter" id="v"><b>v</b></li>
        <li class="letter" id="b"><b>b</b></li>
        <li class="letter" id="n"><b>n</b></li>
        <li class="letter" id="m"><b>m</b></li>
        <li class="symbol"><span class="off"><b>,</b></span><span class="on">&lt;</span></li>
        <li class="symbol"><span class="off"><b>.</b></span><span class="on">&gt;</span></li>
        <li class="symbol"><span class="off"><b>/</b></span><span class="on">?</span></li>
        <li class="right-shift lastitem"><b>shift</b></li>
        <li class="space lastitem"><b>&nbsp;</b></li>
    </ul>
    </div>


Фрагмент CSS:
#container {
margin: 100px auto;
width: 688px;
}
#keyboard {
margin: 0;
padding: 0;
list-style: none;
transform: translate(227px, 134px);
}
    #keyboard li {
    float: left;
    margin: 0 7px 7px 0;
    width: 55px;
    height: 55px;
    line-height: 55px;
    text-align: center;
    background: #fff;
    border: 0.3px solid grey;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    font-family: 'Montserrat', sans-serif;
    }
        .capslock, .tab, .left-shift {
        clear: left;
        }
            #keyboard .tab, #keyboard .delete {
            width: 85px;
            }
            #keyboard .capslock {
            width: 95px;
            }
            #keyboard .return {
            width: 108px;
            }
            #keyboard .left-shift {
            width: 110px;
            }
            #keyboard .right-shift {
            width: 158px;
            }
        .lastitem {
        margin-right: 0;
        }
        .uppercase {
        text-transform: uppercase;
        }
        #keyboard .space {
        clear: left;
        width: 902px;
        }
        .on {
        display: none;
        }
        #keyboard li:hover {
        position: relative;
        top: 1px;
        left: 1px;
        border-color: #e5e5e5;
        cursor: pointer;
        }

@keyframes greenBtn {
from {background-color: white;}
50% {background: green;}
to {background: white;}
}
@keyframes redBtn {
from {background-color: white;}
50% {background: red;}
to {background: white;}
}


Фрагмент JS:
...
} else if(levelText[counterLetters] == keyName){
	        keyName = keyName.toLowerCase();
	        console.log("Введен символ"); //просто проверка
	        levelText = levelText.substring(1);
	        text.innerHTML = levelText;
	        document.getElementById(keyName).style.animation = "greenBtn 0.2s linear";
...
	    } else {
	    	console.log("Введен неверный символ");
	    	//тут будет код, оповещающий об ошибке
	    	mistakesCounter++;
	    	mistakes.innerHTML = ("Кол-во ошибок: " + mistakesCounter);
	    	document.getElementById(keyName).style.animation = "redBtn 0.2s linear 1";
	    }

Полный код
Буду благодарен за помощь
  • Вопрос задан
  • 758 просмотров
Решения вопроса 1
Sanasol
@Sanasol Куратор тега JavaScript
нельзя просто так взять и загуглить ошибку
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы