HTML5音频加载事件?

use*_*657 8 javascript audio html5

音频加载完毕后是否会触发加载事件?我正在创建一个像这样的音频元素.

var myAudio = new Audio("mySound.mp3");
myAudio.load();
Run Code Online (Sandbox Code Playgroud)

尝试添加一个eventListener,但似乎没有触发.

myAudio.addEventListener("load",soundLoaded,false);
Run Code Online (Sandbox Code Playgroud)

jay*_*bee 14

听起来你想要" canplaythrough "活动.当浏览器认为它可以播放整个音频文件而不停止时,它会触发.

尝试:

myAudio.addEventListener('canplaythrough', soundLoaded, false);
Run Code Online (Sandbox Code Playgroud)

加载音频文件时,按此顺序触发7个事件:

  1. loadstart
  2. durationchange
  3. 等待loadedmetadata
  4. loadeddata
  5. 进展
  6. 可以玩
  7. canplaythrough

请注意,9之前的Internet Explorer版本不支持此功能.


Bor*_*nov 5

音频标签的实现非常依赖于浏览器。它的支持我会说比视频标签要少,因为它在史蒂夫乔布斯关于 Flash 与 HTML5 圣战的演讲之后大肆宣传,有趣的是它是 Safari 最不支持的。它真正适用于视频标签(在事件处理程序上)不适用于音频标签,但状态仍然正确有什么好处。例如 :

var a = new Audio();
Run Code Online (Sandbox Code Playgroud)
  • a.networkState并且a.readyState- 通过在计时器上每秒检查一次,您可以轻松了解加载和播放进度。

其他有趣的属性:

  • seeking - 如果 UA 当前正在寻找,则为真
  • seekable - 可能寻找的 TimeRange 对象。
  • played- TimeRangeUA 玩过什么。
  • paused - 如果播放暂停,则为真。
  • ended - 如果播放结束则为真。
  • currentTime - 以秒为单位返回/设置播放位置。
  • duration

不要忘记使用canPlayType(type)- 返回"probably""maybe"

更新:考虑查看 SoundManager2 - http://www.schillmania.com/projects/soundmanager2/