分享HTML5 Audio/Video 标签,属性,方法,事件汇总

2015年03月26日 10:38 0 点赞 0 评论 更新于 2017-05-05 15:33

一、<audio> 标签属性

  • src:指定音乐的URL。
  • preload:用于设置预加载策略。
  • autoplay:设置为该属性后,音频会自动播放。
  • loop:开启循环播放模式。
  • controls:显示浏览器自带的控制条。

以下是 <audio> 标签的示例代码:

<audio id="media" src="http://www.abc.com/test.mp3" controls>
<source src="http://www.abc.com/test.mp3" type="audio/mp3"></source>
<source src="http://www.abc.com/test.ogg" type="audio/ogg"></source>
</audio>

二、<video> 标签属性

  • src:指定视频的URL。
  • poster:设置视频封面,在视频未播放时显示该图片。
  • preload:预加载策略设置。
  • autoplay:自动播放视频。
  • loop:循环播放视频。
  • controls:显示浏览器自带的控制条。
  • width:设置视频的宽度。
  • height:设置视频的高度。

以下是 <video> 标签的示例代码,原代码中 heigt 拼写错误,已修正为 height

<video id="media" src="http://www.abc.com/test.mp4" controls width="400px" height="400px"></video>

三、获取HTMLVideoElement和HTMLAudioElement对象

1. 通过 new 创建 Audio 对象

// audio可以直接通过new创建对象
Media = new Audio("http://www.abc.com/test.mp3");

2. 通过标签获取对象

// audio和video都可以通过标签获取对象
Media = document.getElementById("media");

四、Media方法和属性

HTMLVideoElementHTMLAudioElement 均继承自 HTMLMediaElement

1. 错误状态

Media.error;            // null: 正常
Media.error.code;       // 1. 用户终止 2. 网络错误 3. 解码错误 4. URL无效

2. 网络状态

Media.currentSrc;           // 返回当前资源的URL
Media.src = value;          // 返回或设置当前资源的URL
Media.canPlayType(type);    // 是否能播放某种格式的资源
Media.networkState;         // 0. 此元素未初始化  1. 正常但没有使用网络  2. 正在下载数据  3. 没有找到资源
Media.load();               // 重新加载src指定的资源
Media.buffered;             // 返回已缓冲区域,TimeRanges
Media.preload;              // none: 不预载 metadata: 预载资源信息 auto: 自动预载

3. 准备状态

Media.readyState;       // 1: HAVE_NOTHING 2: HAVE_METADATA 3: HAVE_CURRENT_DATA 4: HAVE_FUTURE_DATA 5: HAVE_ENOUGH_DATA
Media.seeking;          // 是否正在seeking

4. 回放状态

Media.currentTime = value;          // 当前播放的位置,赋值可改变位置
Media.startTime;                    // 一般为0,如果为流媒体或者不从0开始的资源,则不为0
Media.duration;                     // 当前资源长度 流返回无限
Media.paused;                       // 是否暂停
Media.defaultPlaybackRate = value;  // 默认的回放速度,可以设置
Media.playbackRate = value;         // 当前播放速度,设置后马上改变
Media.played;                       // 返回已经播放的区域,TimeRanges,关于此对象见下文
Media.seekable;                     // 返回可以seek的区域 TimeRanges
Media.ended;                        // 是否结束
Media.autoPlay;                     // 是否自动播放
Media.loop;                         // 是否循环播放
Media.play();                       // 播放
Media.pause();                      // 暂停

5. 控制

Media.controls;         // 是否有默认控制条
Media.volume = value;   // 音量
Media.muted = value;    // 静音

6. TimeRanges(区域)对象

TimeRanges.length;              // 区域段数
TimeRanges.start(index)         // 第index段区域的开始位置
TimeRanges.end(index)           // 第index段区域的结束位置

五、事件

eventTester = function(e) {
Media.addEventListener(e, function() {
console.log((new Date()).getTime(), e);
});
}
eventTester("loadstart");       // 客户端开始请求数据
eventTester("progress");        // 客户端正在请求数据
eventTester("suspend");         // 延迟下载
eventTester("abort");           // 客户端主动终止下载(不是因为错误引起)
eventTester("error");           // 请求数据时遇到错误
eventTester("stalled");         // 网速失速
eventTester("play");            // play()和autoplay开始播放时触发
eventTester("pause");           // pause()触发
eventTester("loadedmetadata");  // 成功获取资源长度
eventTester("loadeddata");      // 提示当前帧的数据是可用的
eventTester("waiting");         // 等待数据,并非错误
eventTester("playing");         // 开始回放
eventTester("canplay");         // 可以播放,但中途可能因为加载而暂停
eventTester("canplaythrough");  // 可以播放,歌曲全部加载完毕
eventTester("seeking");         // 寻找中
eventTester("seeked");          // 寻找完毕
eventTester("timeupdate");      // 播放时间改变
eventTester("ended");           // 播放结束
eventTester("ratechange");      // 播放速率改变
eventTester("durationchange");  // 资源长度改变
eventTester("volumechange");    // 音量改变

作者信息

menghao

menghao

共发布了 332 篇文章