DynamicLoad.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. /*预加载处理区域*/
  2. Namespace.register("U.UF.DL");
  3. //#region 加载js css等
  4. /*
  5. * @param {object} 对象。
  6. 如果直接加载javascript,则构建一个javascript的对象,形如{src:"/uform.js","charset": "utf-8", "type": "text/javascript"},也可以带自定义属性。
  7. 由于QQ,微博,微信的加载方式如下:均采用对象形式构建javascript链接文件
  8. 异步加载qq登录的js {"data-appid": "100584402", "charset": "utf-8", "src": "http://qzonestyle.gtimg.cn/qzone/openapi/qc-1.0.1.js" }
  9. 异步加载微博登录的js {"charset": "utf-8", "src": "http://tjs.sjs.sinajs.cn/open/api/js/wb.js?appkey=1242324937&i=" + Guid.newGuid(), "charset": "utf-8", "type": "text/javascript"}
  10. 异步加载微信登录js {"charset": "utf-8", "src": "http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js", "charset": "utf-8", "type": "text/javascript" }
  11. * @param {function} 回调函数
  12. */
  13. U.UF.DL.asynLoadJs = function (obj, fun) {
  14. var _head = U.selectEl("head"); //获取head元素
  15. //创建元素
  16. var _script = $$("script", obj);
  17. //给元素设置事件
  18. U.UF.DL.fileElementLoaded(_script, fun);
  19. //追加元素
  20. _head.append(_script, 0, _head[0].firstChild);
  21. return _script;
  22. }
  23. /**
  24. * 动态添加css文件
  25. * @param {object} 获取的地址对象 例如:{ "href": /uform.css", "type": "text/css", "rel": "stylesheet" }。
  26. * @param {function} 回调函数
  27. *返回值出去做什么?示例在哪里? 操作人可以删除这个link
  28. */
  29. U.UF.DL.asynLoadCss = function (obj, fun) {
  30. var _head = U.selectEl("head"); //获取head元素
  31. //创建元素
  32. var _link = $$("link", obj);
  33. //给元素设置事件
  34. U.UF.DL.fileElementLoaded(_link, fun);
  35. //追加元素
  36. _head.append(_link, 0, _head[0].firstChild);
  37. return _link;
  38. }
  39. /**
  40. * 设置异步加载文件或者iframe
  41. * @param {element} 加载的元素
  42. ----------$("iframe", { "id": _UTP, "name": _UTP, "width": 0, "height": 0, "style": { "display": "none" }, "src": _UDE[i][1] }, _UCS)的iframe对象。
  43. * @param {function} 回调函数
  44. */
  45. U.UF.DL.iframeLoad = function (obj, fun) {
  46. U.UF.DL.fileElementLoaded(obj, fun);
  47. }
  48. //iframe,script标签,link标签三种元素的加载事件设置,并且回调
  49. /**
  50. * @param {element} 加载的元素
  51. ----------$("iframe", { "id": _UTP, "name": _UTP, "width": 0, "height": 0, "style": { "display": "none" }, "src": _UDE[i][1] }, _UCS)的iframe对象。
  52. * @param {function} 回调函数
  53. _B布尔类型
  54. */
  55. U.UF.DL.fileElementLoaded = function (obj, fun) {
  56. //ie系列的处理
  57. if (obj.onreadystatechange !== undefined) {
  58. //为obj添加事件处理函数 类似于onclick之类的
  59. obj.onreadystatechange = function () {
  60. //成功加载的状态码的判断。 在ie系列下readyState == complete 的时候为加载成功
  61. if (obj.readyState == "complete") {
  62. //加载成功后去除事件
  63. obj.onreadystatechange = null;
  64. //没加载成功重新执行isFunction函数
  65. if (U.UF.C.isFunction(fun)) {
  66. //等加载成功直接回调
  67. fun.call(obj)
  68. }
  69. }
  70. }
  71. }
  72. //如果是非ie浏览器支持onload事件加载iframe、 js 、css
  73. else {
  74. //为obj添加事件处理函数 类似于onclick之类的
  75. obj.onload = function () {
  76. //加载成功后去除事件
  77. obj.onload = null;
  78. //没加载成功重新执行isFunction函数
  79. if (U.UF.C.isFunction(fun)) {
  80. //等加载成功直接回调
  81. fun.call(obj)
  82. }
  83. }
  84. }
  85. }
  86. /**
  87. * 在head头部追加样式styleText
  88. *
  89. * @param {string} style标签的内容
  90. * 例:U.UF.DL.loadStyle=(".classname {width:100px}")
  91. *返回值:object 返回出去做什么?用途在哪里? 用户可以根据自己的需求去管理这个object 例如当用户已经加载好不需要这个style可以删除这个style
  92. */
  93. U.UF.DL.loadStyle = function (csstext) {
  94. //Style
  95. var _head = U.selectEl("head")[0]; //获取head标签
  96. var _style = $$("style", {}); //创建一个style标签
  97. //如果HTML5有此属性,则直接写内容
  98. if (_style.styleSheet) { //html5兼容
  99. _style.styleSheet.cssText = csstext;
  100. }
  101. else { //ie兼容
  102. //否则,直接追加孩子节点.
  103. _style.appendChild(document.createTextNode(csstext));
  104. }
  105. _head.appendChild(_style);
  106. document.body.offsetHeight; //添加设置和执行,重绘本页面.
  107. return _style;
  108. }
  109. /*
  110. **作用:在网页开发的过程中,我们会通过Ajax去后台进行通讯交互,
  111. * 在交互的过程中,我们无法预料整个交互的过程的时间,如果这里时候页面上没有任何的提示,
  112. * 那么用户会认为页面上不具备该功能,导致用户体验非常不好,所以在我们调用后台请求的时候,
  113. * 在指定的元素地方加上一个图片loading效果,那么在加载服务器数据的时候页面用户可以看到等待进行的图片,
  114. * 这样的话大大增加了用户体验,Loding加载功能主要的作用就是能在Ajax加载页面数据的时候,
  115. * 在指定区域的添加一张loading的图片
  116. **案例:引用uform框架U.A.Request去后台取数据的时候,有的时候网络情况不是特别好,
  117. * 那么可能会在后台查询有段时间,那么这个时候就会通过U.UF.DL.loading(element);
  118. * 去创建一个loading加载等待数据
  119. **@param {element} el 添加要加一个图片loading效果的指定的的元素
  120. */
  121. U.UF.DL.loading = function (el) {
  122. //判断是否有需要添加loading效果的元素
  123. if (el) {//如果有需要添加loading效果的元素
  124. //判断是否添加了loading元素
  125. // if (el.loadingel) {
  126. // return false;
  127. // }
  128. // else {
  129. // var _elparent = U.selectEl(el).Parent(); //获取添加loading效果的指定元素的父级元素
  130. // var _width = U.selectEl(_elparent)[0].style.width || U.UF.EL.getElementRealWidth ($(_elparent)[0]) + "px";//获取添加loading效果的元素的父级元素的宽
  131. // var _height = U.selectEl(_elparent)[0].style.height || U.UF.EL.getElementRealHeight($(_elparent)[0]) + "px"; //获取添加loading效果的元素的父级元素的高
  132. //判断loading元素的样式display是否隐藏或者显示
  133. if (el.loadingel) {
  134. el.loadingel["P"]++;
  135. }
  136. else {
  137. if (U.UF.EL.offsetParent(el, true) != el) {
  138. el.postion = el.style.position;
  139. el.style.position = "relative";
  140. }
  141. var _lodingel = el.loadingel = $$("div", {
  142. "P": 0, //这个为loading元素
  143. "style": {
  144. "width": "100%",
  145. "height": "100%",
  146. "left": 0,
  147. "top": 0,
  148. "position": "absolute",
  149. "background-color": "#fff"
  150. }//做一个遮罩层,防止里面内容显示出来
  151. });
  152. var _loginimg = $$("div", {
  153. "style": {
  154. "display": "block",
  155. "z-index": "1000",
  156. "width": "37px",
  157. "height": "17px",
  158. "position": "absolute"
  159. }
  160. }, _lodingel); //判断loading元素的样式display是否隐藏或者显示
  161. var _img = $$("img", { "src": "/img/Loading.gif" }, _loginimg); //创建一个存放loading图片的img元素
  162. el.appendChild(_lodingel); //插入loading元素
  163. _loginimg.style.left = ($(el)[0].offsetWidth - _loginimg.offsetWidth) / 2 + 'px'; //获取需要loading元素的父级元素的宽度减去loading元素的宽度除以2
  164. _loginimg.style.top = ($(el)[0].offsetHeight - _loginimg.offsetHeight) / 2 + 'px'; //获取需要loading元素的父级元素的高度减去loading元素的高度除以2
  165. //_elparent.style.overflow = "hidden"; //给当前元素的父级元素添加一个样式,作为一个遮罩层
  166. }
  167. return _lodingel;
  168. // }
  169. }
  170. }
  171. /*
  172. ** 作用:当页面加载完毕后,就移除loading效果
  173. ** @param {element} el 当前laoding元素的整体元素
  174. */
  175. U.UF.DL.uploading = function (el) {
  176. if (el && el.loadingel && el.loadingel["P"]-- == 0) {
  177. //移除loading效果
  178. U.selectEl(el.loadingel).remove();
  179. el.style.position = el.postion;
  180. el.loadingel = null;
  181. }
  182. }
  183. //#endregion