jQuery:在末端队列中加载具有特定顺序和回调的图像

时间:2016-06-15 10:34:02

标签: jquery image load

我试图找到一种方法来让一个队列模式加载一些图像(或其他东西),并在完成后启动一些东西,他的想法就是这样的一个函数:

/**
* 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 -_-

0 个答案:

没有答案