Мне нужно воспроизвести звук с помощью Javascript/JQuery. В настоящее время я использую этот код для воспроизведения звука:
var snd = new Audio('dir/file.wav');
snd.play();
Мне нужно, чтобы страница была непригодной до тех пор, пока звук не закончится. Возможно, с каким-то диалогом во время воспроизведения звука. Когда звук заканчивается, модальный дисплей кнопки "ОК", и после нажатия кнопки вы можете продолжить использовать страницу.
ПРИМЕЧАНИЕ. Это не crossbrowser (только для браузеров, совместимых с HTML5)!
Для совместимости с кросс-браузером вам может понадобиться посмотреть на эту ссылку: какой трюк даст самый надежный/совместимый звуковой сигнал в окне браузера для большинства браузеров
Я серьезно не умею объяснять вещи, но я сделал JsFiddle для вас.
Или вот код:
HTML:
<audio id="myaudio" onended="onAudioEnded();">
<source src="http://www.dccl.org/Sounds/pchick-alarm.wav" type="audio/wav">
Your browser does not support the audio element.
</audio>
<input
type="button"
value="You cannot click me before the sound is over"
onclick="javascript:alert('congrats!')"
/>
JAVASCRIPT:
$(function(){
var audio = document.getElementById("myaudio");
$.blockUI({message : "Listen to the music!" });
audio.play();
});
function onAudioEnded(){
$.unblockUI();
alert("It over!!");
};
Вещи, которые я использовал: jquery, jquery-ui, jquery BlockUI plugin, HTML5 аудио-тег, google.
Кроме того, этот пример не будет работать в IE, поскольку IE не принимает источник звука на удаленном хосте, но он будет работать, если файл локальный на вашем сервере.
Надеюсь, это поможет вам в достижении ваших потребностей,
Марк
Существует очень простое/короткое решение
Используйте следующий код syntax-
Audio_object=document.getElementById('audio_tag_id');
if(Audio_object.currentTime==Audio_object.duration)
alert('completely played.');
audio_tag_id
- это идентификатор <audio>
-element.
Я подумал о следующем подходе: Инициировать таймер и ждать, пока звук не закончится.
Show dialog/dimmed overlay layer
setInterval()
-> Compare snd->currentTime with snd.duration. If they are the same
-> Clear interval
-> Hide dialog/Show OK button
Или
Show dialog/dimmed overlay layer
setInterval()
-> Is snd.ended ?
-> Clear interval
-> Hide dialog/Show OK button