audio和video元素支持HTML 5的媒体事件,详细说明如下表所示。使用JavaScript脚本可以捕捉这些事件并对其进行处理。处理这些事件一般有下面两种方式。
- 一种是使用addEventListener()方法监听,其用法如下:
addEventListener(“事件类型”,处理函数,处理方式)
- 另一种是直接赋值,即获取事件句柄的方法。例如,video.onplay=begin_playing,其中begin_playing为处理函数。
表1 音频与视频相关事件
| 事件 | 描述 |
|---|---|
| abort | 浏览器在完全加载媒体数据之前中止获取媒体数据。 |
| canplay | 浏览器能够开始播放媒体数据,但估计以当前速率播放不能直接将媒体播放完,即可能因播放期间需要缓冲而停止。 |
| canplaythrough | 浏览器以当前速率可以直接播放完整个媒体资源,在此期间不需要缓冲。 |
| durationchange | 媒体长度(duration属性)改变。 |
| emptied | 媒体资源元素突然为空时,可能是网络错误或加载错误等。 |
| ended | 媒体播放已抵达结尾。 |
| error | 在元素加载期间发生错误。 |
| loadeddata | 已经加载当前播放位置的媒体数据。 |
| loadedmetadata | 浏览器已经获取媒体元素的持续时间和尺寸。 |
| loadstart | 浏览器开始加载媒体数据。 |
| pause | 媒体数据暂停播放。 |
| play | 媒体数据将要开始播放。 |
| playing | 媒体数据已经开始播放。 |
| progress | 浏览器正在获取媒体数据。 |
| ratechange | 媒体数据的默认播放速率(defaultPlaybackRate属性)改变或播放速率(playbackRate属性)改变。 |
| readystatechange | 就绪状态(ready-state)改变。 |
| seeked | 浏览器停止请求数据,媒体元素的定位属性不再为真(seeking属性值为false)且定位已结束。 |
| seeking | 浏览器正在请求数据,媒体元素的定位属性为真(seeking属性值为true)且定位已开始。 |
| stalled | 浏览器获取媒体数据过程中出现异常。 |
| suspend | 浏览器非主动获取媒体数据,但在取回整个媒体文件之前中止。 |
| timeupdate | 媒体当前播放位置(currentTime属性)发生改变。 |
| volumechange | 媒体音量(volume属性)改变或静音(muted属性)。 |
| waiting | 媒体已停止播放但打算继续播放。 |
【示例】下面示例使用play()和pause()方法控制视频的播放和暂停播放,使用ended事件监听视频播放是否完毕,使用error事件监听播放过程中发生的各种异常,并及时进行提示。
<body onload="init()">
<video id="video1" autoplay oncanplay="startVideo()" onended="stopTimeline()" autobuffer="true"
width="400px" height="300px">
<source src="medias/volcano.ogv" type='video/ogg'>
<source src="medias/volcano.mp4" type='video/mp4'>
</video><br>
<button onclick="play()">播放</button>
<button onclick="pause()">暂停</button>
<script type="text/javascript">
var video;
function init(){
video = document.getElementById("video1");
//监听视频播放结束事件
video.addEventListener("ended", function(){
alert("播放结束。");
}, true);
// 发生错误
video.addEventListener("error",function(){
switch (video.error.code){
case MediaError.MEDIA_ERROR_ABORTED:
alert("视频的下载过程被中止。");
break;
case MediaError.MEDIA_ERROR_NETWORK:
alert("网络发生故障,视频的下载过程被中止。");
break;
case MediaError.MEDIA_ERROR_DECODE:
alert("解码失败。");
break;
case MediaError.MEDIA_ERROR_SRC_NOT_SUPPORTED:
alert("媒体资源不可用或媒体格式不被支持。");
break;
default:
alert("发生未知错误。");
}
},false);
}
function play(){//播放视频
video.play();
}
function pause(){ //暂停播放
video.pause();
}
</script>
</body>