use*_*687 6 javascript http persistent-connection html5-audio
我正在尝试用javascript预加载音频文件.我正在使用chrome,当我的文件的http请求长大的文件数被chrome取消时...为什么?我能做什么?这是我的代码:
filesToLoad = 44;
filesLoaded = 0;
for ( var ni = 1; ni < filesToLoad; ni++) {
console.log("start::: " + ServerPath + 'audio/' + ni + '.mp3');
loadAudio(ServerPath + 'audio/' + ni + '.mp3');
}
function loadAudio(uri) {
var audio = new Audio();
audio.addEventListener('canplaythrough', isAppLoaded, true); // It
audio.src = uri;
return audio;
}
function isAppLoaded() {
filesLoaded++;
if (filesLoaded >= filesToLoad) {
cb();
}
console.log("load::: " + ServerPath + 'audio/' + filesLoaded + '.mp3');
}
function cb() {
alert("loaded");
}
Run Code Online (Sandbox Code Playgroud)
我试图做同样的事情。我预加载了 12 个音频和 12 个图像文件,为基于它们的交互活动做准备。我遇到了同样的问题(请求已取消)。
我整理了这个对我有用的例程(Chrome 测试到目前为止已完成)。
cacheLessonFiles: function (lessonWords, cacheImg, cacheAudio) {
var
fileName = '',
img = {},
audio = {},
wordIDs = Object.keys(lessonWords)
;
wordIDs.forEach(function (wordID) {
if (cacheImg) {
fileName = lessonWords[wordID].img || wordID;
img = new Image();
img.onload = function () {
console.log('cache: finished caching ' + this.src);
};
img.src = "/img/" + fileName + imageSuffix;
}
if (cacheAudio) {
fileName = lessonWords[wordID].saySpanish || wordID;
audio = new Audio();
audio.onloadeddata = function () {
console.log('cache: finished caching ' + this.src);
};
audioArray.push({a: audio, f:"/audio/" + fileName + audioSuffix});
}
});
setTimeout(loadAudio, AUDIO_LOAD_WAIT);
},
Run Code Online (Sandbox Code Playgroud)
该例程仅加载图像文件,无需特殊处理。图像文件比较棘手。我不是仅仅为循环中的所有音频文件设置源,而是使用音频元素和关联的源文件名 (.mp3) 填充一个数组。然后,我在超时时启动了一个自启动回调来处理该数组,在请求之间暂停 200 毫秒。
function loadAudio () {
var
aud = audioArray.pop()
;
aud.a.src = aud.f;
if (audioArray.length > 0) {
setTimeout(loadAudio, AUDIO_LOAD_WAIT);
}
}
Run Code Online (Sandbox Code Playgroud)
一个常量和一个变量位于闭包内,但位于 cacheLessonFiles() 方法之外。
AUDIO_LOAD_WAIT = 200,
audioArray = []
Run Code Online (Sandbox Code Playgroud)
我尝试将等待时间控制在 200 毫秒以内,但已取消的请求开始重新出现。
我想象连接速度较慢的客户端(我使用的是光纤)可能会再次出现故障,但这对于我的目的来说已经足够好了。
| 归档时间: |
|
| 查看次数: |
1109 次 |
| 最近记录: |