以下是我写的一个图片预加载,使用了$.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不清楚在这里的用法是否有误...
麻烦指出这里的错误,可以的话说说更好的解决方案
return $.when.apply($.when, params); //Deferred 异步
红色部分?
haha ,貌似写错了,我改过来看看,3Q
确实是这个原因,:)
$.when返回的似乎是一个promise,我想实现加载完毕一张图片之后触发progress,请教一下有没有解决方案呢
@上位者的怜悯: 可能需要在某处调用 .notify() 或 .notifyWith() 来查询进度。