Я пытаюсь создать игру Simon, в которой пользователь должен запоминать воспроизводимые звуки в правильной последовательности. Я подключил звук, и он правильно срабатывает при нажатии на элемент. Однако звук не будет воспроизводить один и тот же звук дважды подряд, если вы не щелкните дважды. Другими словами, я не могу заставить компьютер имитировать нажатие кнопки два раза подряд.
Это упрощенный вариант, за исключением моего файла js:
Попытка 1 (вызов функции дважды):
...
var redButton = document.getElementById("red");
var audioRed = document.getElementById("audio-red");
redButton.addEventListener("click", function() {
createNewSeq();
});
...
var createNewSeq = function () {
audioRed.play();
audioRed.play();
};
audioRed сработает только один раз.
Попытка 2 (попытка принудительной перезагрузки с вызовом функции загрузки):
var createNewSeq = function () {
audioRed.play();
audioRed.load();
audioRed.play();
};
Та же проблема - играет только один раз.
Попытка 3 (воссоздание элемента): еще одна попытка, о которой я подумал, - это буквально воссоздание и повторная загрузка аудиотэга при каждом запуске метода, но это кажется смешным и до смешного неэффективным.
Попытка 4 (создать задержку из типа setTimeout): опять же, я знаю, что это ужасно и неточно, но если проблема заключается во времени, возможно, это может помешать тому, чтобы одно и то же было вызвано в то же время, скрывая, был ли он вызван или нет.
Попытка 5 (изменение источника аудиоэлемента для принудительной перезагрузки): я думал, что если вы измените источник элемента, а не измените его обратно, это заставит его рассматривать это второе изменение в отличие от первого.
Действительно ли звук доступен новичку или вам нужно работать с потоками и буферами, чтобы он действительно работал?
Используйте события мультимедиа, чтобы инициировать ended
событие . Если вы думаете об этом, вы пытаетесь играть, загружать, а затем играть все одновременно. Это как сказать: «Играй, загружай, играй!» не дожидаясь его завершения.
Обратите внимание: я не знаю, поддерживает ли браузер Media Events (демонстрация не работает в IE11 из-за ограничений доступа к источнику файла, но работает в Chrome и Firefox Latest).
Демо (воспроизводится дважды по кнопке click
):
<audio id="audiotag1" src="https://upload.wikimedia.org/wikipedia/en/9/9f/Sample_of_%22Another_Day_in_Paradise%22.ogg" preload="auto"></audio>
<button type='button' id='test'>Play Sound</button>
<span id='played'>0</span>
var audiotag = document.getElementById('audiotag1'),
test = document.getElementById('test'),
played = document.getElementById('played'),
times_played = 0,
max_plays = 2;
test.addEventListener('click', function() {
audiotag.play();
times_played++;
played.textContent = 'Play #: ' + times_played;
});
audiotag.addEventListener('ended', function(){
console.log('run again', times_played);
if (times_played >= max_plays) {
times_played = 0;
played.textContent = 'Play #: ' + times_played;
return;
}
audiotag.currentTime = 0;
audiotag.play();
times_played++;
played.textContent = 'Play #: ' + times_played;
});
Эта статья взята из Интернета, укажите источник при перепечатке.
Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.
я говорю два предложения