2014-01-30 5 views
36

В проекте недавно, когда я загрузил звук сJavascript аудиообъекта против HTML5 Audio тега

var myAudio = new Audio("myAudio.mp3"); 
myAudio.play(); 

Он играл прекрасно, если диалог не был открыт (т.е. предупреждение, подтверждающее). Однако, когда я вместо этого попытался добавить звуковой тег в моем HTML

<audio id="audio1"> 
    <source src="alarm.mp3" type="audio/mpeg" /> 
</audio> 

и используя

var myAudio1 = document.getElementById("audio1"); 
myAudio1.play() 

он продолжал играть после того, как диалог был открыт. Кто-нибудь знает, почему это? Кроме того, в общем, каковы различия между двумя способами воспроизведения звуков?

+0

Где именно вы получаете яваскрипт Audio объект из? т.е. какая библиотека? –

+1

Хороший вопрос, я точно не уверен, я последовал за несколькими примерами из stackoverflow, вот пара, которую я видел, [ex1] (http://stackoverflow.com/questions/3273552/html-5-audio-looping) , [ex2] (http: // stackoverflow.com/questions/9419263/play-audio-with-javascript), в последнем кто-то предложил это как способ воспроизвести аудио «если вы не хотите возиться с элементами html». Я думал, что это чистые js, однако я странно не могу найти никакой документации. Единственной библиотекой, которую я использую, является jquery. Очевидно, что тег html предпочтителен, мне все еще интересно узнать об объекте Audio, но, пожалуйста, отправьте документацию, если найдете – ekcrisp

ответ

18

Согласно this wiki entry в Mozilla <audio> и new Audio()должны быть одинаковыми, но это не выглядит, как это имеет место на практике. Всякий раз, когда мне нужно создать звуковой объект в JavaScript, я на самом деле просто создать <audio> элемент вроде этого:

var audio = document.createElement('audio'); 

Это фактически создает аудио элемента, который можно использовать именно как <audio> элемент, который был объявлен в данной странице HTML.

Чтобы воссоздать ваш пример с этой техникой, вы бы это сделать:

var audio = document.createElement('audio'); 
audio.src = 'alarm.mp3' 
audio.play(); 
+0

, можете ли вы объяснить, как использовать ваш пример? – Damainman

+0

@Damainman Что вы пытаетесь сделать? В примере, который я покажу, будет создан элемент '

+0

Спасибо, что ответили! В примере OP, вручную создавая аудио-элемент в html, он контролирует, где этот элемент отображается в html. В вашем примере, поскольку элемент html динамически создается из js-кода, он не объясняет, как элемент аудио отображается на странице. Дайте мне знать, если то, что я говорю, не имеет смысла. – Damainman

9

JavaScript останавливается во время оповещения или Confirm окна.

Вы не можете одновременно запускать код и отображать alert(), confirm() или prompt(), он буквально ожидает ввода пользователя на этом, это является основной особенностью JavaScript.

Я предполагаю, что именно по этой причине аудиофайл, воспроизводимый полностью в пределах JavaScript, делает это. Сравнительно видеоролики Flash или аудио/видео HTML5 будут продолжать воспроизводиться, даже если открыто предупреждение JavaScript/подтверждение/приглашение.

Что касается того, какой метод лучше, хорошо, что зависит от вас. Это довольно архаично, чтобы сделать что-либо с JavaScript, встроенным в alert/confirm/prompt больше, есть способы лучше искать подсказки, которые вы можете сделать с помощью jQuery UI и так далее.

Если у вас много динамического контента на странице или вы ищете фоновый буферизирующий звук перед тем, как их нужно запускать, и так далее, то JavaScript, вероятно, является более здравым способом решения вопросов.

Если у вас буквально один игрок на экране, тогда нет никаких оправданий для того, чтобы не вставлять код HTML. Несмотря на то, что в наши дни вряд ли кто-то повлияет на кого-то, по-прежнему плохая практика сильно зависит от JavaScript, когда нет оснований.

0

Если вы будете создавать - тогда вы будете иметь проблемы КСНЫ, потому что это показывает даже вы установите ширину: 0px

+1

'display: none;' должен быть стандартным, поддерживаемым всеми браузерами. – timmyRS