使用Javascript播放audioelement(html5)

问题描述:

我想弄清楚如何触发从javascript播放音频。我得到了一些HTML,看起来像:使用Javascript播放audioelement(html5)

<div class='audio' >foo 
<audio preload='auto' controls src='test.wav'> 
<b>Your browser does not support the audio tag.</b> 
</audio> 
</div> 

我试图与触发它:

$(document).ready(function() { 
    $('.audio').each(function(){ 
     var audio = $(this).find('audio').get(); 
     $(this).click(function(){ 
      audio.volume = 100; 
      alert('1 '+audio); 
      audio.play(); 
      alert('2'); 
     }); 
    }); 
}); 

警报( '1' +音频);按预期工作并将音频报告为HTMLAudioElement。然而警报('2');没有被调用,因为我得到的错误'audio.play'不是一个函数。我能做些什么来解决这个问题?

+1

你的意思是说你得到一个错误,指出'audio.play'不是函数吗?我非常确定这是正确的,'alert.play'不是一个函数,除非你专门用play方法定义了一个新的alert对象。 – kinakuta 2011-06-16 02:41:04

+0

从Firefox复制和粘贴错误控制台: 错误:audio.play不是一个功能 - 当然是一个很好的问题,但遗憾的是这是真的oO – 2011-06-16 02:45:18

+1

这更有意义 - 我认为这就是你的意思,但只是想确保那里在你的实际代码中不是一个错字。 – kinakuta 2011-06-16 02:47:46

你的代码看起来很完美。你得到的错误是“alert.play”不是一个函数或“audio.play”不是一个函数。

我觉得

var audio = $(this).find('audio').get(); 

返回数组试试这个

var audio = $(this).find('audio').get(0); 
+0

谢谢:D--我现在可以用沉重的东西打我自己,但是让这个东西最终运行是一种很好的感觉。 – 2011-06-16 03:04:33

控制音频不jQuery的使用,如果你给音频标签的ID只是JavaScript是更容易:

<audio id="myAudioTagID" type="audio/mpeg" src="sound.mp3"></audio> 

然后您可以简单地获取元素并应用.pause(),.start(),stop():

var audio = document.getElementById("myAudioTagID"); 
audio.play(); 
audio.pause(); 
audio.stop();