Я пытаюсь пересобрать игру, которая работает на зуде, чтобы она была совместима с большинством основных устройств и браузеров.У меня проблема с тем, что на iOS (и, возможно, на других мобильных устройствах) вызов для воспроизведения звуковых тегов от событий нажатия и касания имеет довольно значительную задержку.
Я читал о нескольких возможных причинах, включая задержку в 300 мс, предотвращение повторного нажатия для события второго щелчка, остановка пропуска для потенциальных родительских щелчков, различные форматы аудио, вызывающие задержку при распаковке и т. Д. Кажется, ничего не работает.
Изначально я намеревался хранить все в vanilla js без внешних библиотек, чтобы заставить себя по-настоящему узнать, что происходит под капотом.Тем не менее, у меня был некоторый успех с некоторыми внешними библиотеками для других проблем, поэтому я попробовал fastclick.js для этой проблемы.Это тоже не сработало для меня.Так что, если кто-то знает, как решить эту проблему без библиотеки, это было бы замечательно, но после просмотра кода fastclick, это может быть выше моего уровня понимания.
Текущую сборку можно найти по адресу www.teachersteve.net/assett_loading_with_ian/assett_loading_with_ian.html
Некоторые объяснения моего мыслительного процесса:
Iудалили все, что на самом деле связано с игрой, чтобы попытаться изолировать проблему.Я поместил все активы непосредственно в html, чтобы упростить процесс загрузки, и жду, чтобы запустить JS после загрузки DOM
document.addEventListener("DOMContentLoaded", doSomething);
В настоящее время я вызываю только один аудио-тег для воспроизведения какЯ где-то читал, что вызов нескольких тегов может перегрузить процесс распаковки и вызвать задержку.Это, кажется, не проблема.
У меня есть 3 различных формата файлов для попыток совместимости ... Я читал, что LEI16 (формат WAV) может быть лучше, потому что он устраняетсжатие, хотя я еще не пробовал.
Это остальная часть функции doSomething ()
function doSomething() {
document.body.style.opacity = 1;
document.addEventListener("click", playAudio);
document.addEventListener('click', preventInputDefault);
document.addEventListener('ontouchend', preventInputDefault);
console.log("assetts loaded");
if ('addEventListener' in document) {
document.addEventListener('DOMContentLoaded', function() {
FastClick.attach(document.body);
}, false);
}
function playAudio() {
// backgroundMusic.play();
letterAudio.play();
// correctAnswerAudio.play();
// letterAudio.play();
// correctAnswerAudio.play();
}
function preventInputDefault(evt) {
evt.preventDefault();
console.log("hello preventInputDefault");
evt.stopPropagation();
console.log("hello stopPropagation");
}
}
Спасибо!