Namespace.register("U.UF.IMG"); /** * 图片预加载方法 * * @param {string} 需要加载的图片地址 * @param {function} 预加载回调函数 * @param {function} 加载成功回调 * @param {function} 错误处理回调 * @return {element} 图片元素 */ U.UF.IMG.imgReady = function (url, URD, ULD, UE) { var _UW, _UH, _UNW, //image对象的width属性 _UNH, //image对象的height属性 _UIMG = new Image(); //image对象 _UOR = function () { //预加载 _UIMG = _UIMG || this; _UNW = _UIMG.width; _UNH = _UIMG.height; //获取加载图片的长宽 if ((_UNW !== _UW || _UNH !== _UH) || _UNH !== 0) { if (URD) { URD.call(_UIMG) }; _UOR.end = true; } }; U.selectEl(_UIMG).addAttrArray({ "src": url, "onload": function () { //成功加载回调 setTimeout(function () { if (!_UOR.end) { _UOR() }; if (_UIMG) { _UIMG.onload = _UIMG.onerror = null }; if (_UIMG && ULD) { ULD.call(_UIMG) }; _UIMG = null; }, 0); }, "onerror": function () { //错误图片处理 if (U.UF.C.IsNetwork()) { if (UE) { UE.call(_UIMG) }; } } }); if (_UIMG) { //说明图片还在加载中 _UOR(); //执行预加载处理 if (_UIMG.complete == true) { //判断是否已经成功加载过了 缓存图片处理 _UIMG.onload(); return; } } if (!_UOR.end) { //添加进入图片大小加载事件 U.UF.IMG.imgReady._UL.push(_UOR); if (U.UF.IMG.imgReady._UIT == null) { U.UF.IMG.imgReady._UIT = setInterval(U.UF.IMG.imgReady._URT, 40); //每40毫秒进入 } } return _UIMG; } U.UF.IMG.imgReady._UIT; //计时器初始化 U.UF.IMG.imgReady._UL = []; //需要预加载的图片集 //去除预加载计时 U.UF.IMG.imgReady._US = function () { clearInterval(U.UF.IMG.imgReady._UIT); U.UF.IMG.imgReady._UIT = null; }; //计时加载逐个加载处理 U.UF.IMG.imgReady._URT = function () { for (var i = 0; i < U.UF.IMG.imgReady._UL.length; i++) { U.UF.IMG.imgReady._UL[i].end ? U.UF.IMG.imgReady._UL.splice(i--, 1) : U.UF.IMG.imgReady._UL[i](); } if (!U.UF.IMG.imgReady._UL.length) { U.UF.IMG.imgReady._US() }; }