2014-01-30 90 views
36

在项目最近,当我加载的声音与JavaScript的音频对象对HTML5音频标签

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

到底在哪你得到从JavaScript的音频对象?即什么库? –

+1

好问题,我不确定,我跟着几个从stackoverflow的例子,这里是我看到的一对夫妇,[ex1](http://stackoverflow.com/questions/3273552/html-5-audio-looping) ,[ex2](http:// stackoverflow。com/questions/9419263/playing-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你想做什么?我演示的例子将在JavaScript中创建和'

+0

感谢您的回复!在OP示例中,通过在html中手动创建音频元素,他控制了该元素在html中的显示位置。在你的例子中,因为html元素是从js代码动态创建的,所以它没有解释音频元素是如何出现在页面中的。让我知道我所说的话没有意义。 – Damainman

9

的JavaScript停止或确认框。

您不能同时运行代码,并显示alert()confirm(),或prompt(),它的字面等待该用户输入,这是JavaScript的一个核心功能。

我认为这就是为什么音频文件完全在JavaScript范围内播放的原因。即使JavaScript警报/确认/提示已打开,相对Flash视频剪辑或HTML5音频/视频也会继续播放。

至于什么方法更好,那么取决于你。使用alert/confirm/prompt中内置的JavaScript做任何事情都是非常古老的,有更好的方式来查看你可以使用jQuery UI等等。

如果您在页面上有很多动态内容,或者您​​正在寻找背景缓冲音频,然后才需要触发等等,那么JavaScript可能是更好的方法。

如果你在屏幕上只有一个玩家,那么没有理由不加入HTML代码。尽管这些日子不太可能影响任何人,但在没有理由的情况下依赖JavaScript的做法仍然是不好的做法。

0

如果您将创建 - 那么你将不得不在iOS上的问题,因为它显示即使您将设置宽度:0像素

+1

'display:none;'应该是一个标准,支持所有浏览器。 – timmyRS