[随手记]h5播放器属性和自定义播放器

版权说明:

本文整理转载自

《Professional JavaScript for Web Developers, 3rd Ed》(《JavaScript高级程序设计(第3版)》)

以备参阅和交流,如有侵权,请联系博主删除

邮箱: [email protected]

正文

属性

<video>和<audio>元素都提供了完善的 JavaScript 接口。下表列出了这两个元素共有的属性,通
过这些属性可以知道媒体的当前状态。

属 性 数据类型 说 明
autoplay 布尔值 取得或设置autoplay标志
buffered 时间范围 表示已下载的缓冲的时间范围的对象
bufferedBytes 字节范围 表示已下载的缓冲的字节范围的对象
bufferingRate 整数 下载过程中每秒钟平均接收到的位数
bufferingThrottled 布尔值 表示浏览器是否对缓冲进行了节流
controls 布尔值 取得或设置controls属性,用于显示或隐藏浏览器内置的控件
currentLoop 整数 媒体文件已经循环的次数
currentSrc 字符串 当前播放的媒体文件的URL 
currentTime 浮点数 已经播放的秒数
defaultPlaybackRate 浮点数 取得或设置默认的播放速度。默认值为1.0秒
duration 浮点数 媒体的总播放时间(秒数)
ended 布尔值 表示媒体文件是否播放完成
loop 布尔值 取得或设置媒体文件在播放完成后是否再从头开始播放
muted 布尔值 取得或设置媒体文件是否静音
networkState 整数 表示当前媒体的网络连接状态:0表示空,1表示正在加载,2表示
正在加载元数据,3表示已经加载了第一帧,4表示加载完成
paused 布尔值 表示播放器是否暂停
playbackRate 浮点数 取得或设置当前的播放速度。用户可以改变这个值,让媒体播放速
度变快或变慢,这与defaultPlaybackRate只能由开发人员修改
的defaultPlaybackRate不同
played 时间范围 到目前为止已经播放的时间范围
readyState 整数 表示媒体是否已经就绪(可以播放了)。0表示数据不可用,1表示
可以显示当前帧,2表示可以开始播放,3表示媒体可以从头到尾播放
seekable 时间范围 可以搜索的时间范围
seeking 布尔值 表示播放器是否正移动到媒体文件中的新位置
src 字符串 媒体文件的来源。任何时候都可以重写这个属性
start 浮点数 取得或设置媒体文件中开始播放的位置,以秒表示
totalBytes 整数 当前资源所需的总字节数
videoHeight 整数 返回视频(不一定是元素)的高度。只适用于<video> 
videoWidth 整数 返回视频(不一定是元素)的宽度。只适用于<video> 
volume 浮点数 取得或设置当前音量,值为0.0到1.0 

其中很多属性也可以直接在和元素中设置。

事件

除了大量属性之外,这两个媒体元素还可以触发很多事件。这些事件监控着不同的属性的变化,这
些变化可能是媒体播放的结果,也可能是用户操作播放器的结果。下表列出了媒体元素相关的事件。

事 件 触发时机
abort 下载中断
canplay 可以播放时;readyState值为2 
canplaythrough 播放可继续,而且应该不会中断;readyState值为3 
canshowcurrentframe 当前帧已经下载完成;readyState值为1 
dataunavailable 因为没有数据而不能播放;readyState值为0 
durationchange duration属性的值改变
emptied 网络连接关闭
empty 发生错误阻止了媒体下载
ended 媒体已播放到末尾,播放停止
error 下载期间发生网络错误
load 所有媒体已加载完成。这个事件可能会被废弃,建议使用canplaythrough
loadeddata 媒体的第一帧已加载完成
loadedmetadata 媒体的元数据已加载完成
loadstart 下载已开始
pause 播放已暂停
play 媒体已接收到指令开始播放
playing 媒体已实际开始播放
progress 正在下载
ratechange 播放媒体的速度改变
seeked 搜索结束
seeking 正移动到新位置
stalled 浏览器尝试下载,但未接收到数据
timeupdate currentTime被以不合理或意外的方式更新
volumechange volume属性值或muted属性值已改变
waiting 播放暂停,等待下载更多数据

这些事件之所以如此具体,就是为了让开发人员只使用少量 HTML 和 JavaScript(与创建 Flash 影
片相比)即可编写出自定义的音频/视频播放器。

自定义媒体播放器

使用和元素的 play()和 pause()方法,可以手工控制媒体文件的播放。组合使
用属性、事件和这两个方法,很容易创建一个自定义的媒体播放器,如下面的例子所示。

16.3 媒体元素 489 

    <div class="mediaplayer"> 
     <div class="video"> 
     <video id="player" src="movie.mov" poster="mymovie.jpg" 
     width="300" height="200"> 
     Video player not available. 
     </video> 
     </div> 
     <div class="controls"> 
     <input type="button" value="Play" id="video-btn"> 
     <span id="curtime">0</span>/<span id="duration">0</span> 
     </div> 
    </div> 

以上基本的 HTML 再加上一些 JavaScript 就可以变成一个简单的视频播放器。以下就是 JavaScript
代码:

//取得元素的引用
var player = document.getElementById("player"), 
 btn = document.getElementById("video-btn"), 
 curtime = document.getElementById("curtime"), 
 duration = document.getElementById("duration"); 
//更新播放时间
duration.innerHTML = player.duration; 
//为按钮添加事件处理程序
EventUtil.addHandler(btn, "click", function(event){ 
 if (player.paused){ 
 player.play(); 
 btn.value = "Pause"; 
 } else { 
 player.pause(); 
 btn.value = "Play"; 
 } 
}); 

//定时更新当前时间
setInterval(function(){ 
 curtime.innerHTML = player.currentTime; 
}, 250); 

以上 JavaScript 代码给按钮添加了一个事件处理程序,单击它能让视频在暂停时播放,在播放时暂
停。通过元素的 load 事件处理程序,设置了加载完视频后显示播放时间。最后,设置了一个
计时器,以更新当前显示的时间。你可以进一步扩展这个视频播放器,监听更多事件,利用更多属性。
而同样的代码也可以用于元素,以创建自定义的音频播放器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章