首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为HTML5音频元素制作加载栏?

如何为HTML5音频元素制作加载栏?
EN

Stack Overflow用户
提问于 2012-10-23 16:03:38
回答 4查看 6.8K关注 0票数 9

我正在尝试为HTML5音频元素创建一个加载栏(显示加载/缓冲的百分比)。

对于视频标签,可以使用以下公式进行计算:

代码语言:javascript
复制
video.buffered.end(0) / video.duration

但是我不能让这个和音频标签一起工作。它只返回一个固定值。

有什么想法吗?

谢谢!

EN

回答 4

Stack Overflow用户

发布于 2014-12-14 13:20:25

在未进行检查的情况下对buffered调用end方法是不可靠的。您可能正在尝试对任何对象调用该方法。检查这个小提琴:

代码语言:javascript
复制
document.querySelector('span').innerHTML = document.querySelector('audio').buffered.length;
代码语言:javascript
复制
<audio src="http://myst729.qiniudn.com/within-temptation_pale.mp3" controls autoplay></audio>
<p>Buffered Length: <span></span></p>

看见?在第一个开始,缓冲长度是0-什么都没有加载。在调用startend方法之前,需要确保缓冲长度不为0。

每次你读buffered的时候,它确实是固定的。因此,为了达到视觉上的“加载”效果,你需要一遍又一遍地阅读它。

这里我尝试每隔50毫秒更新一次加载和播放百分比:

代码语言:javascript
复制
var audio = document.querySelector('audio');
var percentages = document.querySelectorAll('span');

function loop() {
  var buffered = audio.buffered;
  var loaded;
  var played;

  if (buffered.length) {
    loaded = 100 * buffered.end(0) / audio.duration;
    played = 100 * audio.currentTime / audio.duration;
    percentages[0].innerHTML = loaded.toFixed(2);
    percentages[1].innerHTML = played.toFixed(2);
  }

  setTimeout(loop, 50);
}

loop();
代码语言:javascript
复制
<audio src="http://myst729.qiniudn.com/within-temptation_pale.mp3" controls autoplay></audio>
<p>Loaded: <span></span>%</p>
<p>Played: <span></span>%</p>

注释:可能无法在您的位置访问MP3文件。如果是这样的话,就试试其他你喜欢的资源吧。否则,你会听到一个非常漂亮的女声,并看到百分比不断变化,最终达到100%。

票数 17
EN

Stack Overflow用户

发布于 2014-12-14 09:16:55

您可以使用以下代码来获取HTML5音频元素的进度并将其应用于元素:

代码语言:javascript
复制
var myAudio = document.getElementById('#myAudio');
var myProgressBar = document.getElementById('#myProgressBar'); 

myAudio.addEventListener('timeupdate', onLoadProgress);

function onLoadProgress () {
    var progress = parseInt(((myAudio.currentTime / myAudio.duration) * 100), 10);
    myProgressBar.value = progress; 
}
票数 1
EN

Stack Overflow用户

发布于 2017-07-04 23:50:27

我不太确定我是否理解了你的问题。但这是我用来计算有多少音频被缓冲的方法

代码语言:javascript
复制
var audio = document.querySelector('audio');
var set;
window.onload = function(){set=setInterval(buffer,1000);}; 
    function buffer () {
    if(audio.buffered.length>0){
   var percent = (audio.buffered.end(0) / audio.duration) * 100;
       document.querySelector('p').innerHTML = percent+'%';
     if(percent === 100){
           clearInterval(set); 
       } 
       }
}
代码语言:javascript
复制
<audio src="http://customhtml5video.000webhostapp.com/audio.mp3" controls></audio>
<p></p>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13025946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档