首页 新闻 会员 周边 捐助

jQuery.Deferred对象的when方法使用问题

0
悬赏园豆:20 [已解决问题] 解决于 2015-05-12 13:53

以下是我写的一个图片预加载,使用了$.Deferred(),jquery 1.11

目前的问题是,$.when的done可以触发,但是progress和fail无法触发,麻烦看看哪里的问题

(function () {  //图片预加载,promise
        $.preLoadImg = function () {
            var params = $.isArray(arguments[0]) ? arguments[0] : [].slice.call(arguments);
            var proArr = params.map(function (ele) {
                return getPromise(ele);
            });
            return $.when.apply($.when, params);  //Deferred 异步
        }
        function getPromise(src) {
            var img = document.createElement("img");
            var dfd = $.Deferred();
            img.onload = function () {
                dfd.resolve(this);
            };
            img.onerror = function () {
                dfd.reject(this);
            };
            img.src = src;
            return dfd;
        }
    })();

    var arr = ["/Content/images/1.jpg",
        "/Content//images/2d.jpg",
        "/Content/images/logo.jpg",
        "/Content/images/o_header_bg_cloude.jpg"];

    $.preLoadImg(arr).progress(function (img) {
        console.log("progress..." + img.src);
    }).fail(function (img) {
        console.log("error..." + img.src);
    }).done(function () {
        console.log("finish");
    });

当图片路径全都正确,可以触发done,但是图片加载失败无法触发fail?

而且这个progress不清楚在这里的用法是否有误...

麻烦指出这里的错误,可以的话说说更好的解决方案

上位者的怜悯的主页 上位者的怜悯 | 初学一级 | 园豆:172
提问于:2015-05-12 10:45
< >
分享
最佳答案
0
return $.when.apply($.when, params); //Deferred 异步

红色部分?

收获园豆:15
飞扬的尘埃 | 小虾三级 |园豆:1318 | 2015-05-12 11:41

haha ,貌似写错了,我改过来看看,3Q

上位者的怜悯 | 园豆:172 (初学一级) | 2015-05-12 11:45

确实是这个原因,:)

$.when返回的似乎是一个promise,我想实现加载完毕一张图片之后触发progress,请教一下有没有解决方案呢

上位者的怜悯 | 园豆:172 (初学一级) | 2015-05-12 12:08

@上位者的怜悯: 可能需要在某处调用 .notify() 或 .notifyWith() 来查询进度。

飞扬的尘埃 | 园豆:1318 (小虾三级) | 2015-05-12 14:28
其他回答(1)
0

建议参考一下这个实现代码:https://github.com/FiNGAHOLiC/jquery.imgpreloader

收获园豆:5
dudu | 园豆:29570 (高人七级) | 2015-05-12 11:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册