Есть вот такая функция, при её выполнении сначала выводится модальное окно, и только потом воспроизводиться аудио. Нужно, чтоб сначала воспроизводилось аудио, а потом выводилось модальное окно. Как это осуществить? И почему порядок выполнения не сходится с последовательностью в коде?
function result(){
if(total>0){
$('#audio').get(0).play();
alert('Новых заказов:'+total);
}
}
Вероятно, play() не является атомарной функцией: внутри происходит асинхронная предзагрузка необходимого для старта файла фрагмента, а затем уже происходит запуск. Вызывая alert() вы останавливаете поток выполнения, тем самым не давая запуститься аудио.
Выход: отслеживать события audio, например, playing, и уже в обработчике события показывать alert().
$(function() {
$('#audio').on('playing', function() {
alert('test');
});
$('#audio').get(0).play();
});
<audio id="audio">
<source src="https://www.sample-videos.com/audio/mp3/crowd-cheering.mp3" type="audio/mpeg">
</audio>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Отслеживать события audio. Показать alert() в обработчике события ended.
$(function() {
$('#audio').get(0).play();
$('#audio').on('ended', function() {
alert('test');
});
});
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости