Я играю с HTML 5 <audio>
тегами. Я нашел это очень здорово, но просто столкнулся с очень странной ситуацией. Короче говоря, canplaythrough
не срабатывает на мобильных устройствах, как ожидалось.HTML <audio> тэг canplaythrough не стреляет по мобильному
В этом случае, у меня есть несколько кнопок на веб-странице:
<button id="sndbtn01" onclick="createAudioById('01')">Audio 01</button>
<button id="sndbtn02" onclick="createAudioById('02')">Audio 02</button>
<button id="sndbtn03" onclick="createAudioById('03')">Audio 03</button>
<button id="sndbtn04" onclick="createAudioById('04')">Audio 04</button>
Что я ожидаю, чтобы играть 01.mp3, когда «Audio 01» нажата, и подобное действие для нажатия «Audio 02 »,« Аудио 03 »,« Аудио 04 ». И я надеюсь, что тег <audio>
создается при нажатии кнопки, чтобы я мог сохранять трафик без предварительной загрузки.
Итак, у меня есть код JavaScript:
var audioObj = {};
function createAudioById(id){
var p = audioObj[id];
// alert(1)
if (p != undefined) {
alert(2);
p.play();
return;
} else {
alert(3);
p = new Audio();
p.addEventListener('canplaythrough', function(e){
e.currentTarget.removeEventListener('canplaythrough', arguments.callee);
alert(4);
p.play();
});
p.src = '../snds/'+id+'.mp3';
audioObj[id] = p;
}
}
Но поведение странно на мобильных устройствах:
на мобильный (iPhone):
- Сначала нажмите на
button 01
Триггеры(3)
, а затем ничего не происходит - событиеcanplaythrough
никогда не запускается, и звук никогда не воспроизводится - НЕ, как ожидалось:(4)
должен огонь и звук должны играть; - Если я нажму кнопку еще раз, то начнется
(2)
, и звук будет воспроизводиться. Но странно то, что(4)
запускается через несколько секунд после начала воспроизведения звука. - Если я нажимаю на кнопку во время воспроизведения звука, запускается
(2)
, и ничего не происходит, звук продолжает играть - как и ожидалось; - Если я нажму на кнопку, когда звук будет воспроизведен, будет запущен
(2)
, звук будет воспроизводиться, а(4)
никогда не появится - как и ожидалось.
Спасибо за ответ, я попробовал еще раз и обнаружил, что 'canplaythrough' запускает каждый раз, когда я вызываю audioelement.play(); - Это немного странно. В любом случае, как удалить прослушиватель событий в этом случае? И есть ли у вас какие-либо сведения о том, почему мероприятие не увольняется на мобильных устройствах? –
Я не знаю, почему canplaythrough не запускается на мобильных устройствах, но для удаления прослушивателя событий просто добавьте e.currentTarget.removeEventListener ('canplaythrough') внутри функции, которая запускает прослушиватель событий, чтобы избавиться от прослушивателя событий, когда он запускается в первый раз. Убедитесь, что вы добавили параметр e в функцию, открывающуюся как функция-обработчик (e) { – tomysshadow
Спасибо, я обновил вопрос, но после добавления 'e.currentTarget.removeEventListener ('canplaythrough')' '' (4) 'is все еще стрельба - вы можете увидеть отредактированный вопрос для моего последнего кода. –