我试图找到一种方法来让一个队列模式加载一些图像(或其他东西),并在完成后启动一些东西,他的想法就是这样的一个函数:
/**
* the idea
* @param [] urls Each url to load
* @param function onDone When queue is finish and OK
* @param function onFail When queue is finish and KO append
* @param function onLoad When a specific url finish to load
* @param function onError When specific url fail to load
* @return promise (https://api.jquery.com/deferred.promise/)
*/
jQuery.loadImages = function(urls, onDone, onFail, onLoad, onError){
onFail = onFail || function(){};
onLoad = onLoad || function(){};
onError = onError || function(){};
var queue = new Queue();
urls.map(function(url){
queue.add( jQuery.loadImage(url, onLoad, onError) ); // here the systme to add in the queue in which I add my promise return by jQuery.loadImage
});
queue.finish(onDone, onFail);
return queue; // this must be a promise
};
我还有用于加载一张图片作为承诺的代码:
jQuery.loadImage = function(url, onLoad, onError) {
function load(deferred){
function _onLoad(){
off();
onLoad && onLoad(image);
deferred.resolve(image);
}
function _onError(){
off();
onError && onError(image);
deferred.reject(image);
}
function off() {
image.onload = image.onerror = image.onabort = null; // le onabort est pour IE
}
var image = new Image();
image.onload = _onLoad;
image.onerror = _onError;
image.onabort = _onError;
image.src = url;
};
return jQuery.Deferred(load).promise();
};
我发现这个:http://jsfiddle.net/coffeeandcode/yg9P6/但似乎使用“setTimeout”,这是一种不好的做法,而且无法添加onDone / onFail。
编辑1 :我尝试了一些可以工作的东西:https://jsfiddle.net/jyuj1w9q/3/(查看控制台日志以查看结果)但是通过这个例子,你可以看到,第二张图片(苹果)哪个登录在第三位的是一个沉重的大小,此外onDone not run -_-