2014-09-03 134 views
7

我正在用HTML5和jQuery构建mp3播放列表播放器。在这个播放器中,有一个水平条与缓存的MP3文件一起逐渐增长。为什么audio.buffered.end(0)在尝试获取缓冲时间时收到错误消息

这里是我的全码: get buffered end

HTML5:

<audio id="music" controls> 
    <source src="https://archive.org/download/musicTestAudio27/Very%20nice%20%2827%29.mp3" type="audio/mpeg"> 
</audio> 
    <br/> 
    <div id="buffered"></div> 

CSS:

#buffered{ 
    border:solid #ccc 1px; 
    height:10px; 
    background:red; 
    display:block; 
    width:1%; 
} 

的Javascript:

var track = document.getElementById("music"); 
setInterval(function(){ 
var w = 100*(track.buffered.end(0))/track.duration; 
$('#buffered').css("width",w+"%"); 
}, 1000); 

但杉木EFOX给我一个错误消息说:

IndexSizeError: Index or size is negative or greater than the allowed amount

var w = 100*(track.buffered.end(0))/track.duration;

和谷歌Chrome说:

Uncaught IndexSizeError: Failed to execute 'end' on 'TimeRanges': The index provided (0) is greater than or equal to the maximum bound (0).

回答

5

我相信访问buffered.end元素初始化之前时的错误来了。 你可以重写代码,以避免它

track = document.getElementById("music"); 
track.onprogress = function(){ 
    var w = 100*(track.buffered.end(0))/track.duration; 
    $('#buffered').css("width",w+"%"); 
} 
+0

非常感谢。这非常有帮助。我一直在寻找四天。但是现在它的功能就像一个魅力我添加了这个: ** if(track.onprogress){var。w2 = 100 *(track.buffered.end(0))/ track.duration; $('#buffered').css(“width”,w2 +“%”); }'** – user3524045 2014-09-03 20:40:01

3

接受的答案没有解决这个问题对我来说。您也应该检查音轨您访问buffered.end之前加载像这样:

track.onprogress = function(){ 
    if (track.readyState === 4){ 
     var w = 100*(track.buffered.end(0))/track.duration; 
     $('#buffered').css("width",w+"%"); 
    } 
} 
1
track = document.getElementById("music"); 
track.onprogress = function(){ 
    if(track.buffered.length>0){ 
     var w = 100*(track.buffered.end(0))/track.duration; 
     $('#buffered').css("width",w+"%"); 
    } 
} 
+4

虽然此代码可能对您有用,但没有解释它的功能或为什么它会回答问题,或者它与其他答案有什么不同。一个好的答案应该包括对这些主题的解释。 – AdrianHHH 2015-11-12 14:58:36

相关问题