Конечно, существует множество способов реализовать эту функцию в JS. Вот тот, который вручную назначает класс при нажатии клавиши a
. Примечание: это также приводит к тому, что кнопка имеет псевдокласс :active
при выполнении функции.
Обновление
Вот немного более модульная отправная точка, которую вы можете попробовать. К сожалению, в vanilla JS вы можете назначать только одного прослушивателя событий за раз (в отличие, например, от jQuery). Это означает, что нам нужно два отдельных слушателя: один для keydown
и другой для keyup
. В моем очень простом примере, приведенном ниже, я приказываю вашей функции logKey просто возвращать, равен или нет event.keyCode
ключ, который нас интересует (т. Е. a
| 65
). Когда logKey () возвращает истинное значение, мы переключаем активный класс кнопки. Он включается при срабатывании события keydown
и выключается при срабатывании события keyup
.
Я уверен, что это не самое красноречивое решение, но, возможно, оно поможет вам начать полезный путь.
?
var button = document.querySelector('.button')
var KEY = 65;
var logKey = (event) => {
return event.keyCode === KEY;
}
var toggleButton = function() {
let keyPressed = logKey(event);
if (keyPressed) {
button.classList.toggle('button--active');
}
}
var listen = function() {
window.addEventListener('keydown', toggleButton);
window.addEventListener('keyup', toggleButton);
}
listen();
.button {
left: 400;
bottom: 400;
position: fixed;
margin: 0 auto;
height: 120px;
width: 120px;
text-align: center;
font-size: 16px;
border-style: solid;
border-color: black;
border-width: 4px;
border-radius: 20px;
}
.button--active {
background-color: #4CAF50;
color: white;
box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24), 0 17px 50px 0 rgba(0,0,0,0.19);
height: 122px;
width: 122px;
}
<button id="button" class="button">A</button>
ОБНОВЛЕНИЕ 2
Кроме того, есть возможность изменить стиль непосредственно в моя функция "logKey"?
Хмм. Прямо с JavaScript? Конечно. Но я бы переложил эту ответственность на CSS. Если вы просто хотите применить класс внутри этой функции ... возможно. Или, может быть, я вас неправильно понимаю. Programmati c click()
внутри функции logKey просто программно нажимает кнопку. Но все еще должна быть функция, которая выполняется при щелчке .
Вот еще один вариант, который может быть на ваш вкус.
document.addEventListener("keydown", logKey);
document.addEventListener("keyup", logKey);
var myButton = document.querySelector('#button');
function logKey(event) {
if (event.keyCode === 65) {
myButton.click();
}
}
function changeItUp() {
myButton.classList.toggle('button--active');
};
.button {
left: 400;
bottom: 400;
position: fixed;
margin: 0 auto;
height: 120px;
width: 120px;
text-align: center;
font-size: 16px;
border-style: solid;
border-color: black;
border-width: 4px;
border-radius: 20px;
}
.button--active,
.button:active {
background-color: #4CAF50;
color: white;
box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24), 0 17px 50px 0 rgba(0,0,0,0.19);
height: 122px;
width: 122px;
}
<button onclick="changeItUp()" id="button" class="button">A</button>