Активировать эффект кнопки onclick css с помощью js

Я делаю приложение для пианино, используя vanilla JS, и оно позволяет нажимать клавиши пианино с помощью клавиатуры. Так что всякий раз, когда нажимаются определенные клавиши на клавиатуре, будет нажиматься соответствующая кнопка. Но я также хочу, чтобы эффект css при нажатии кнопки активировался.

Мне удалось заставить клавиши клавиатуры работать с помощью метода .click(), но это не активирует эффект нажатия кнопки css. Есть ли способ сделать это?

Это то, что у меня есть до сих пор.

    document.addEventListener('keydown', (event) => {
        if (event.repeat) return

        switch (event.key) {
            case "a":
                document.getElementById("c4").click();
                break
            // then a bunch more cases for the rest of the keys

Пожалуйста, прочтите Как спросить ; в частности, часть о предоставлении минимального воспроизводимого примера

Quentin 13.02.2023 10:24

Я добавил некоторую информацию в свой ответ

mplungjan 13.02.2023 14:16
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Все мы знаем, что [] instanceof Array возвращает true, но почему [] instanceof Object тоже возвращает true?
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) - это древовидная структура данных, которая представляет структуру и иерархию исходного кода на языке...
1
2
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Ты можешь сделать

const a = document.getElementById("c4")


document.addEventListener('keydown', (event) => {

  switch (event.key) 
    case "a":
      a.click();
      a.classList.add("down")

И удалить класс на keyUp

Чтобы сэкономить ваше время, возможно, вы можете использовать этот codepen, который я взял, чтобы добавить к нему JS.

Https://codepen.io/mplungjan/pen/dyjLKYJ

Я добавил к нему события клавиатуры, но псевдокласс :active не срабатывает при нажатии.


Более простая альтернатива (мне не нравится переключатель):

Дайте каждому элементу заметки class="note"

<button type = "button" class = "note">A</button>
<button type = "button" class = "note">B</button>
<button type = "button" class = "note">C</button>

Тогда есть

const notes = [...document.querySelectorAll(".note")].reduce((acc,cur) => {
  acc[cur.textContent.toLowerCase()] = cur;
  return acc
},{})

const validKeys = "abcdefg";
document.addEventListener('keydown', (event) => {
  const key = event.key;
  if (!validKeys.includes(key)) return;
  const note = notes[key];
  note.click();
  note.classList.add("down")
});

Чтобы активировать эффект CSS при нажатии кнопки, вы можете вручную добавить и удалить класс CSS, соответствующий эффекту клика.

Вы можете реализовать это в своем коде:

document.addEventListener('keydown', (event) => {
    if (event.repeat) return

    switch (event.key) {
        case "a":
            let c4 = document.getElementById("c4");
            c4.classList.add("clicked");
            setTimeout(() => {
                c4.classList.remove("clicked");
            }, 100);
            break
    }
});

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