Вопрос по html5, jquery, audio, javascript – Как определить, когда закончилось воспроизведение звука HTML5 (более одного раза)? [Дубликат]

20

This question already has an answer here:

How to detect an audio has finished playing in a web page? 2 answers

У меня проблема с определением, когда тэг заканчивает проигрывать mp3. Когда я делаю что-то вроде этого:

     myAudio.addEventListener("ended", function() 
     {
          alert("ended");
     });

Это происходит только при первом воспроизведении аудио. Когда я снова играю аудио, ничего не происходит. То же самое происходит, когда я используюonended=doThis(); метод. Я слышал, что, возможно, есть способ сделать это в jQuery, но я не смог заставить его работать. Я также слышал, что может быть способ исправить это, изменив аудиоid каждый раз, когда проигрывается mp3, но это не работает для меня, потому что мне нужноid остаться прежним.

Кто-нибудь получил какие-нибудь идеи?

да еще работаетjsfiddle.net/MvzFN/3 fcalderan
jsfiddle.net/MvzFN/2 (смотрите / слушайте в chrome): в этом скрипте однозначное событие, кажется, всегда срабатывает fcalderan
Попробуйте создать звуковой тег в HTML, а не в JavaScript. У вас все еще работает? evenodd
@AndersonGreen это не дубликат, другой ответ показывает метод, который ОП уже использует, и просьбу о помощи по конкретному поведению Felipe Sabino

Ваш Ответ

1   ответ
34

ended событие создано на основе.currentTime http://w3c.github.io/html/semantics-embedded-content.html#eventdef-media-ended

Итак, все, что вам нужно сделать, это установить.currentTime к нулю снова.

myAudio.addEventListener("ended", function(){
     myAudio.currentTime = 0;
     console.log("ended");
});
Я попробовал это, но для меня это не сработало. хотя я обнаружил, что повторное добавление прослушивателя событий перед каждым воспроизведением меня устраивало. Я использую Tizen Web, так что я не уверен, что именно из-за этого он для меня будет другим или нет. но думал, что стоит упомянуть.
Это сделал это! Но я также должен был сделать паузу до этого, потому что иначе это был бы просто бесконечный цикл evenodd
еще одна вещь, которую я узнал при использовании Tizen. использование этого метода не гарантирует, что эффекты функции произойдут после того, как носитель закончился, они будут происходить не всегда после того, как носитель фактически закончился. Лучше поместить onended в тег html, так как это был единственный способ заставить его работать так, как ожидалось.

Похожие вопросы