当前位置:嗨网首页>书籍在线阅读

11-加载并播放音频

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.3.4 加载并播放音频

在试图播放音频之前,要使用canplaythrough和progress事件加载

<audio id="theAudio" controls>
<source src="song1.mp3" type="audio/mp3">
<source src="song1.wav" type="audio/wav">
<source src="song1.ogg" type="audio/ogg">
Your browser does not support the audio element.
</audio>

与在本书中创建的大多数应用程序类似,在window DOM对象加载完成后创建progress事件和canplaythrough事件的处理函数。然后,通过调用audioElment对象的load()方法开始加载音频文件。

window.addEventListener('load', eventWindowLoaded, false);
function eventWindowLoaded(){
  var audioElement = document.getElementById("theAudio");
  audioElement.addEventListener('progress',updateLoadingStatus,false);
  audioElement.addEventListener('canplaythrough',audioLoaded,false);
  audioElement.load();
}

在发送 canplaythrongh事件后调用 canvasApp函数。通过调用DOM对象的getElementById()函数可以从HTML页面中获取到audio元素的引用,然后开始播放音频(这里创建一个名为audioElement的变量。整个画布应用程序将使用该变量引用HTML页面中的audio元素)。接下来,调用audioElement的play()函数。

var audioElement = document.getElementById("theAudio");
audioElement.play();

读者可能想知道为什么没有使用HTMLAudioElement的preload属性,而是强行加载音频并监听canplaythrough事件。这样做有两个对video元素也同样适用的原因:第一,预加载的目的是为了确保程序在运行时所需的资源可用;第二,预加载保证用户在加载时可以看到一些有用或有趣的东西。而使用标准的preload属性,理论上会在页面加载之前强行加载音频。由于画布应用是交互式的程序,所需要的资源比在页面加载时加载的资源要多。因此,应避免使preload属性并在应用内加载资源。