HTML5多媒体API的事件

课后整理 2020-12-7

audio和video元素支持HTML 5的媒体事件,详细说明如下表所示。使用JavaScript脚本可以捕捉这些事件并对其进行处理。处理这些事件一般有下面两种方式。

addEventListener(“事件类型”,处理函数,处理方式)

表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>