Как сделать так, чтобы событие множественного нажатия клавиш работало без сбоев? - PullRequest
0 голосов
/ 10 октября 2019
    $(document).on('keydown', function(event) {
            const current = audios[Number(event.key) // audios is array of music files
            current.currentTime = 0;
            current.play();
    });

Я создаю барабанное приложение. Если я нажму номер 2 с событием keydown, оно будет активировано. И пока я удерживаю цифру 2 и нажимаю 3, цифра 2 перестанет звучать. Как я могу сделать это? И почему не это?

1 Ответ

0 голосов
/ 10 октября 2019

Похоже, в вашем коде есть синтаксическая ошибка. const current = audios[Number(event.key) отсутствует закрывающее ].

Вот как я бы подошел к нему.

const pressedKeys = {};

$(document.body).keydown(function (evt) {
  pressedKeys[Number(evt.key)] = true;
  playSongs(pressedKeys);
});

$(document.body).keyup(function (evt) {
  pressedKeys[Number(evt.key)] = false;
});

function playSongs(dict) {
  for (let song in dict) {
    if (dict[song] === true) {
      audios[song].currentTime = 0;
      audios[song].play();
    }
  }
}

Этот код отслеживает ключи в словаре. Всякий раз, когда keydown зарегистрирован, он добавляет его в словарь. Сразу после этого playSongs находит все клавиши, которые являются истинными, и воспроизводит эту песню.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...