Image.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. Namespace.register("U.UF.IMG");
  2. /**
  3. * 图片预加载方法
  4. *
  5. * @param {string} 需要加载的图片地址
  6. * @param {function} 预加载回调函数
  7. * @param {function} 加载成功回调
  8. * @param {function} 错误处理回调
  9. * @return {element} 图片元素
  10. */
  11. U.UF.IMG.imgReady = function (url, URD, ULD, UE) {
  12. var _UW,
  13. _UH,
  14. _UNW, //image对象的width属性
  15. _UNH, //image对象的height属性
  16. _UIMG = new Image(); //image对象
  17. _UOR = function () { //预加载
  18. _UIMG = _UIMG || this;
  19. _UNW = _UIMG.width;
  20. _UNH = _UIMG.height; //获取加载图片的长宽
  21. if ((_UNW !== _UW || _UNH !== _UH) || _UNH !== 0) {
  22. if (URD) { URD.call(_UIMG) };
  23. _UOR.end = true;
  24. }
  25. };
  26. U.selectEl(_UIMG).addAttrArray({ "src": url,
  27. "onload": function () { //成功加载回调
  28. setTimeout(function () {
  29. if (!_UOR.end) { _UOR() };
  30. if (_UIMG) { _UIMG.onload = _UIMG.onerror = null };
  31. if (_UIMG && ULD) { ULD.call(_UIMG) };
  32. _UIMG = null;
  33. }, 0);
  34. },
  35. "onerror": function () { //错误图片处理
  36. if (U.UF.C.IsNetwork()) {
  37. if (UE) { UE.call(_UIMG) };
  38. }
  39. }
  40. });
  41. if (_UIMG) { //说明图片还在加载中
  42. _UOR(); //执行预加载处理
  43. if (_UIMG.complete == true) { //判断是否已经成功加载过了 缓存图片处理
  44. _UIMG.onload(); return;
  45. }
  46. }
  47. if (!_UOR.end) { //添加进入图片大小加载事件
  48. U.UF.IMG.imgReady._UL.push(_UOR);
  49. if (U.UF.IMG.imgReady._UIT == null) {
  50. U.UF.IMG.imgReady._UIT = setInterval(U.UF.IMG.imgReady._URT, 40); //每40毫秒进入
  51. }
  52. }
  53. return _UIMG;
  54. }
  55. U.UF.IMG.imgReady._UIT; //计时器初始化
  56. U.UF.IMG.imgReady._UL = []; //需要预加载的图片集
  57. //去除预加载计时
  58. U.UF.IMG.imgReady._US = function () {
  59. clearInterval(U.UF.IMG.imgReady._UIT);
  60. U.UF.IMG.imgReady._UIT = null;
  61. };
  62. //计时加载逐个加载处理
  63. U.UF.IMG.imgReady._URT = function () {
  64. for (var i = 0; i < U.UF.IMG.imgReady._UL.length; i++) {
  65. U.UF.IMG.imgReady._UL[i].end ? U.UF.IMG.imgReady._UL.splice(i--, 1) : U.UF.IMG.imgReady._UL[i]();
  66. }
  67. if (!U.UF.IMG.imgReady._UL.length) { U.UF.IMG.imgReady._US() };
  68. }