html5 audio设置currentTime


不使用audio.currentTime改变当前播放时间的原因是:当拖拽的进度条过长,没有缓存到该位置,而且,不在seekable(可搜索到的范围,分为很多部分,每部分不一定是连续的)的范围,音频会被重新加载,回到最初的位置。


audio.fastSeek(currentTime);方法,Safari浏览器支持该方法,Chrome浏览器里没有该方法,所以,使用该方法改变audio.currentTime的值之前,需要先判断fastSeek方法是否存在,即 

if('fastSeek' in audio){

audio.fastSeek(currentTime);//改变audio.currentTime的值

}

audio没有fastSeek方法时,使用audio.seekable和audio.buffered,使用audio.seekable比较安全,audio.seekable分为很多段,每部分都有start和end方法,各个段之间不一定连续,落在audio.seekable每个段audio.seekable.start(i)~audio.seekable.end(i)范围内的time都可以直接设置audio.currentTime = time;出现在该范围内的时间不会被重新加载,可直接跳至拖拽的时间,如果时间不在audio.seekable范围内,重新加载的情况也要避免的最好方法,就是接下来要讲的audio.buffered.

audio.buffered也有很多段,每段都是连续的,如果上面的情况都不满足的时候,即:既缓冲的最大时间小于当前拖拽处的时间,且不在audio.seekable的范围,此时,可以设置audio.currentTime = audio.buffered.end(audio.buffered.length-1);回到缓冲的最大位置处。


你可能感兴趣的:(js)