在Javascript中通过循环链接回调函数
我不想再同时预加载我的图像了,我想一个接一个地加载它们。直到现在我都是这样做的:在Javascript中通过循环链接回调函数,javascript,callback,Javascript,Callback,我不想再同时预加载我的图像了,我想一个接一个地加载它们。直到现在我都是这样做的: for (var i = current; i < current + 5; i++) { images[i].load(); } 这是可行的,但我想把它转换成一个循环。我不能为了达到这个目的而绞尽脑汁。你能帮忙吗 我只能提供我的load(callback)方法的一个示例,因为它太长了: load = function(callback){ // do preloading things
for (var i = current; i < current + 5; i++) {
images[i].load();
}
这是可行的,但我想把它转换成一个循环。我不能为了达到这个目的而绞尽脑汁。你能帮忙吗
我只能提供我的
load(callback)
方法的一个示例,因为它太长了:
load = function(callback){
// do preloading things and simulate load event:
setTimeout(function(){
callback.apply(this);
}, 1000);
}
这里有一把小提琴来测试它:可能是递归函数
function loadImages(){
var images = [img1, img2, ...];
loadImage(images);
}
function loadImage(images){
if(images.length){
images.shift().load(function(){
loadImage(images);
});
}
}
我刚刚想出了递归执行的方法:
var call_chain = function(){};
for(var i = current + 5; i >= current; i--){
(function(f, index){
call_chain = function(){
images[index].load(f);
};
})(call_chain, i);
}
call_chain();
Post
.load
实现。请按上面所述在此处加载实现。我发布了一个加载函数示例和一个小提琴来测试它!抱歉,我忘了提到我并不总是想加载所有的图片,但从给定的索引开始只加载大约五个。这里有一个例子:干净的解决方案,但一个次要的技术点。这不是递归的,因为堆栈上一次只有LoadImage
的onc实例。递归的具体意思是有一些东西可以返回。
var call_chain = function(){};
for(var i = current + 5; i >= current; i--){
(function(f, index){
call_chain = function(){
images[index].load(f);
};
})(call_chain, i);
}
call_chain();