buffered属性详解

作者: ALOLONGHUN | 来源:发表于2017-09-21 00:11 被阅读33次

最近在做一个基于微信的H5页面,其中涉及到音频播放的内容,例如播放、暂停、跳转进度条等基本功能差不多都实现了,但是想做个以前没做过的功能,在原有的功能上加个缓冲进度条,于是开始上W3C查找资料,找到这么一个属性——buffered,对其解释为:

buffered 属性返回 TimeRanges 对象。
TimeRanges 对象表示用户的音视频缓冲范围。
缓冲范围指的是已缓冲音视频的时间范围。
如果用户在音视频中跳跃播放,会得到多个缓冲范围。

这么一看,这个TimeRanges对象应该就是关键所在了,那么再看看TimeRanges对象的属性:

  • length : 获得音视频中已缓冲范围的数量
  • start(index) : 获得某个已缓冲范围的开始位置
  • end(index) : 获得某个已缓冲范围的结束位置

这样看来,我们已经可以利用现有的知识去制作缓冲条了,开始上代码:

// CSS略去...
// HTML
<audio id="myAudio" src="myMusic.mp3" controls autoplay></audio>
<div>Loaded: <span></span>%</div>
<div>Played: <span></span>%</div>
<div class="control">
  <span id="buffered"></span>
  <span id="progress"></span>
</div>

// JS
<script>  
var myAudio = document.getElementById('myAudio');
var myBuffered = document.getElementById('buffered');
var myProgress = document.getElementById('progress');

//监听播放,触发播放条样式改变
myAudio.addEventListener("timeupdate", onProgress, false);
onProgress();

function onProgress() {
    myProgress.css("width", (myAudio.currentTime / myAudio.duration) * 100 + '%');
}

//缓冲进度条功能,进度条样式随进度改变
functionon onBuffered() {
    var buffered = myAudio.buffered,
         loaded, played;

    if (buffered.length) {
         loaded = 100 * buffered.end(0) / myAudio.duration;
         played = 100 * myAudio.currentTime / myAudio.duration;
         myBuffered.innerHTML = loaded.toFixed(2);
         myProgress.innerHTML = played.toFixed(2);
         myBuffered.css("width", loaded + "%");
     }

      setTimeout(onBuffered, 50);
}
</script>

好啦!这样进度条就完成了,截图如下:

音频缓冲条

相关文章

网友评论

    本文标题:buffered属性详解

    本文链接:https://www.haomeiwen.com/subject/mvtnsxtx.html