2016-07-12 3 views
0

Я работаю с элементом audio по умолчанию (без предоставления элемента управления пользователю), с которым я взаимодействую через jQuery (смена источника, воспроизведение/пауза - обычный). Теперь я пытаюсь перейти на следующий трек (второго звукового элемента), начиная с 5 секунд раньше, чтобы добиться плавного перехода.Выполнение Javascript-кода за 5 секунд до того, как аудио-элемент html5 достигнет конца воспроизведения

Из того, что я собрал из media events и audio element attributes страниц, ни один метод не существует, чтобы делать это по умолчанию - самая близкая вещь существует, кажется, onended событие (которое срабатывает слишком поздно, очевидно), а атрибут loop, который имеет ту же проблему.

Я отделено мою предыдущую попытку в ответ, чтобы удалить вопрос из неотвеченных очереди, но он изначально был включен здесь

Любая помощь в решении этой проблемы более эффективно, изначально таким образом я пропустил , или совершенствование моего существующего решения сильно усложняются! Заранее спасибо.

+0

Я также благодарен за отзывы о нисходящем потоке или дополнительную информацию, которая вам понадобится ... – TheThirdMan

+0

Это самый эффективный метод. Один случай использования, о котором вы, возможно, и не подумали, - это то, как пользователь пропускает звук, который он испортит. Кроме того, как конечный пользователь, я бы не хотел, чтобы программа зависала с моими томами звука и т. Д. – DevNebulae

+0

@GamerNebulae: Хорошо, я мог бы забыть об этом. В этом случае, однако, это фоновая музыка, поэтому пользователь не получает никакого контроля над воспроизведением (за исключением запуска и остановки его), также не должно быть проблем с замиранием в следующем треке из интерактивность. – TheThirdMan

ответ

1

На данный момент, единственное решение, которое я вижу, чтобы проверить длительность трека раньше времени, а затем установите следующий тайм-аут:

$('audio').bind('loadedmetadata', function() { 
    duration = $(this).prop('duration') * 1000; // get duration in milliseconds 
    var fadetimer = setTimeout(function(){ 
    // set up next audio file 
    }, duration - 5000); // execute timeout 5 seconds before end of playback 
}); 

Это кажется крайне неэффективно для меня, однако. Я также не уверен, оставит ли этот метод тайм-ауты «мусора» или привязки событий в фоновом режиме, что в конечном итоге приведет к замедлению и замедлению работы приложения.

+0

И что, если пользователь приостанавливает звук, или если во время воспроизведения возникает какая-то латентность? Лучшим подходом было бы использовать событие [timeupdate] (https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Media_events#timeupdate), когда 'audio.currentTime === audio. продолжительность - 5', тогда вызывается ваша функция. – Kaiido

+0

@ Kaiido: Я должен был добавить это к вопросу на данный момент, но, поскольку я прокомментировал вопрос, у пользователя нет никаких элементов управления аудио в моем случае - это просто фоновый звук. Подход «timeupdate» был намечен другим пользователем в комментариях, но для моего случая этот метод казался менее ресурсоемким. Конечно, если вы не согласны или имеете другое мнение, не стесняйтесь публиковать его как ответ, и я попробую! – TheThirdMan

 Смежные вопросы

  • Нет связанных вопросов^_^