U.Img.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. //#region 图片阅览器
  2. Namespace.register("U.Img");
  3. /**
  4. * 图片阅览器
  5. *
  6. * @param {array} 图片集合
  7. ----------[Thm] 小图
  8. ----------[Img] 原图
  9. * @param {number} 访问第几张图
  10. * @param {object} 属性设置
  11. * @param {function} 创建回调函数
  12. * @return {object} 图片浏览器对象
  13. */
  14. U.Img.Create = function (UDE, UI, UME, UCB) {
  15. U.M.StopBubble(); //取消冒泡
  16. return (new U.Img.Create.init(UDE, UI, UME, UCB)).Create(); //创建图片浏览器功能区域
  17. }
  18. /**
  19. * 图片阅览器
  20. *
  21. * @param {array} 图片集合
  22. ----------[Thm] 小图
  23. ----------[Img] 原图
  24. * @param {number} 访问第几张图
  25. * @param {object} 属性设置
  26. * @param {function} 创建回调函数
  27. * @return {object} 图片浏览器对象
  28. */
  29. U.Img.Create.init = function (UDE, UI, UME, UCB) {
  30. /*
  31. 参数说明:Iss 、I: 当前图片显示的位置 UCB:回调函数、 AIMG: 图片集
  32. */
  33. this.Iss;
  34. this.UIOD;
  35. this.BL;
  36. this.UIMG;
  37. this.W;
  38. this.h;
  39. this.R = 0;
  40. this.I = typeof UI == "number" ? UI : 0;
  41. this.UCB = UCB;
  42. this.CTF = true;
  43. this.AIMG = UDE;
  44. for (var i in UME) {
  45. if (UME.hasOwnProperty(i)) {
  46. this[i] = UME[i];
  47. }
  48. }
  49. }
  50. U.Img.Create.init.prototype = {
  51. ET: [], //图片浏览的总和
  52. /**
  53. * 图片阅览器
  54. *
  55. * @param {array} 图片集合
  56. * @param {number} 访问第几张图
  57. */
  58. ImgT: function (UDE, UDID) { //创建图片
  59. var i, //用于循环
  60. _UDOD, _UDTD, _UDSD, _UDKD, _UDCD, _UDID, //图片变量
  61. _UCE = [["放大", "UD_SYJDXB"], ["缩小", "UD_SYJDXS"], ["左转", "UD_SYJDXL"], ["右转", "UD_SYJDXR"]];
  62. //图片浏览器存在 自己修改替换值
  63. if ((_UDOD = $("#" + UDID)[0])) { //如果图片存在
  64. _UDID = $(_UDOD).childg(0)[0];
  65. _UDID = $(_UDID).Child()[2];
  66. _UDID = $("img", _UDID);
  67. $(_UDOD).Center();
  68. _UDID.length ? (_UDID = _UDID[0], _UDID.src = UDE["Thm"]) : (_UDTD.innerHTML = "",
  69. _UDCD = $$("div", { "className": "UD_SYJZO" }, _UDTD),
  70. _UDID = $$("img", { "onerror": U.M.apply(this, [[U.M.ImgError, ["this", 1]]]), "onselectstart": U.M.apply(), "ondragstart": U.M.apply(), "src": U.M.GetImgU(UDE["Thm"]) }, _UDCD));
  71. }
  72. //创建新的图片浏览器
  73. else {
  74. _UDOD = $$("div", { "className": "UD_SYJ UD_SYJO", id: UDID, "onmousewheel": [[U.M.StopBubble], [this.Wheel, [this]]], "__size__": "false", "onmousedown": [[U.D.DragMouseDown, ["this"]]] });
  75. _UDTD = $$("div", { "className": "UD_SYJA" }, _UDOD);
  76. _UDSD = $$("div", { "className": "UD_SYJD", "onmousedown": U.M.StopBubble, "onclick": U.M.StopBubble }, _UDTD);
  77. _UDSD = $$("div", { "className": "UD_SYJDX" }, _UDSD); _UDSD = $$("div", { "className": "UD_SYJDXS" }, _UDSD);
  78. for (i = 0; i < _UCE.length; i++) {
  79. _UDKD = $$("div", { "className": "UD_SYJDXC", "style": i ? {} : { "margin": "0px" }, "title": _UCE[i][0], onclick: U.M.apply(this, [[i > 1 ? this.Rotate : this.Zoom, [i > 1 ? (i - 2) * 2 - 1 : (i ? "Out" : "In"), _UDOD, this]]]) }, _UDSD);
  80. if (!i) { _UDCD = $$("div", {}, _UDKD); $$("div", { "title": "回到原图", "innerHTML": "&nbsp; 100%", onclick: U.M.apply(this, [[this.Zoom, [100, _UDOD, this]]]) }, _UDKD); } else { _UDCD = _UDKD; }
  81. $$("div", { "className": "UD_SYI UD_SYJDXO " + _UCE[i][1] }, _UDCD);
  82. $$("div", { "className": "UD_SYJDXT", "title": "点击" + _UCE[i][0], "innerHTML": _UCE[i][0] }, _UDCD);
  83. }
  84. $$("div", { "className": "UD_SYJL UD_SYJLO UD_SYI", "onmousedown": U.M.StopBubble, "onclick": U.M.StopBubble }, _UDTD);
  85. _UDCD = $$("div", { "className": "UD_SYJZ", "onmousedown": U.M.StopBubble }, _UDTD); $$("div", { "className": "UD_SYJL UD_SYJRO UD_SYI", "onmousedown": U.M.StopBubble, "onclick": U.M.StopBubble }, _UDTD);
  86. _UDCD = $$("div", { "className": "UD_SYJZO" }, _UDCD); _UDID = $$("img", { "onerror": U.M.apply(this, [[U.M.ImgError, ["this", 1]]]), "onselectstart": U.M.apply(), "ondragstart": U.M.apply(), "src": U.M.GetImgU(UDE["Thm"]) }, _UDCD);
  87. $$("div", { "className": "UD_SYI UD_SYQC UD_SYQCT", style: { top: "0", right: "0" }, "title": "关闭", "onmousedown": U.M.StopBubble, "onclick": U.M.apply(this, [[this.Close, [null, this]]]) }, _UDOD);
  88. $(_UDOD).appendTo((this.parent || document.body)).Center();
  89. }
  90. //返回窗体、图片元素
  91. return [(this.UIOD = _UDOD), (this.UIMG = _UDID)];
  92. },
  93. //创建图片浏览器
  94. Create: function () {
  95. if (this.AIMG) {//如果有传图片
  96. //AIMG是一个对象,里面包含了需要打开的图片路径
  97. this.AIMG = this.AIMG.length != null ? this.AIMG : [this.AIMG]; //图片集
  98. var _UIE = this.AIMG[this.I], //当前图片
  99. _UDE = (this.UCB ? this.UCB(_UIE) : this.ImgT(_UIE, "Usestudio_Img")); //这里是是否使用默认的图片浏览器创建
  100. this.R = 0;
  101. this.Iss = $(this.UIOD).attr("__size__") == "false";
  102. //异步加载图片
  103. U.M.imgReady(U.M.GetImgU(_UIE["Img"]), U.M.apply(null, [[this.Ready, [_UDE[0], _UDE[1], this, _UIE]]]), U.M.apply(null, [[this.Load, [_UDE[0], _UDE[1], this, _UIE]]]), U.M.apply(this, [[this.Error, [_UIE["Img"]]]])); //生成图片
  104. return this;
  105. }
  106. },
  107. /**
  108. * 删除窗体
  109. *
  110. * @param {element} 图片浏览器窗体
  111. * @param {number} 图片浏览器对象
  112. * @param {string} 回调参数
  113. */
  114. XSI: function (UIOD, UT, UTF) {
  115. if (UT.CTF) { UT.Close(UIOD, UT, UTF); } //关闭
  116. UT.CTF = true; //允许关闭
  117. },
  118. /**
  119. * 滚动放大缩小处理
  120. *
  121. * @param {object} 图片浏览器对象
  122. * @param {event} 回调参数
  123. */
  124. Wheel: function (UT, UE) {
  125. UE = event || UE;
  126. var _UWD = UE.wheelDelta ? (UE.wheelDelta / 120) : (-(UE.detail || UE.deltaY) / 3), _UTF = _UWD > 0 ? "In" : "Out"; //判断滚动是放大还是缩小
  127. UT.Zoom(_UTF, UT.UIOD, UT); //放大缩小
  128. },
  129. /**
  130. * 切换图片的上一张或下一张
  131. *
  132. * @param {number} 上一张的区分
  133. ----------1 下一张处理
  134. -----------1 上一张处理
  135. * @param {object} 图片浏览器对象
  136. * @param {function} 回调参数
  137. */
  138. Change: function (UTF, UT, UCB) {
  139. //获取当前显示第几张图片
  140. UTF = UT.I + UTF;
  141. UT.I = UTF = (UTF < 0 || UTF >= UT.AIMG.length) ? ((UTF < 0) ? UT.AIMG.length - 1 : 0) : UTF;
  142. //设置一张图片的链接
  143. var _UIID = $(UT.UIMG).addAttrArray({ "src": UT.AIMG[UTF]["Thm"], "style": { "filter": "alpha(opacity=30)",
  144. "MozOpacity": "0.3", "Khtml-opacity": "0.3", "opacity": "0.3"
  145. }
  146. });
  147. //图片位置大小处理
  148. UT.PJ("", "", UT.UIOD, UT.UIMG); //位置定位
  149. UT.Rotate((UT.R = 0), UT.UIOD, UT); //大小位置重置
  150. //加载图片回调
  151. U.M.imgReady(UT.AIMG[UTF]["Img"], U.M.apply(null, [[UT.Ready, [UT.UIOD, _UIID[0], UT]]]),
  152. U.M.apply(null, [[UT.Load, [UT.UIOD, _UIID[0], UT]]]), U.M.apply(this, [[UT.Error]]));
  153. (UCB) && (U.M.apply(UT, UCB)()); //图片加载处理
  154. },
  155. /**
  156. * 滚动设置
  157. *
  158. * @param {string} 上传成功回调函数
  159. * @param {number} 上传成功回调函数
  160. * @param {function} 回调参数
  161. */
  162. Zoom: function (US, UIOD, UT) {//放大缩小
  163. //UIOD是整个IMG窗体
  164. //US用来判断滚轮是向外滚还是向内滚
  165. var US,
  166. _UW,
  167. _UH,
  168. _UIMG = $(this.UIMG);
  169. ("Out,In".indexOf(US) > -1) && (US = US == "Out" ? this.BL * 0.8 : this.BL / 0.8);
  170. UT.W = UT.W || _UIMG[0].width; UT.H = UT.H || _UIMG[0].height;
  171. this.BL = US = Math.max(Math.min(300, US), 22);
  172. _UH = parseInt(UT.H * (US / 100)); _UW = parseInt(UT.W * (US / 100));
  173. _UIMG.addAttrArray({ "style": { "width": _UW + "px", "height": _UH + "px"} });
  174. UT.PJ(_UW, _UH, UIOD, _UIMG[0]);
  175. U.D.PopupWindow(UIOD);
  176. },
  177. /**
  178. * 图片定位调整
  179. *
  180. * @param {number} 图片浏览器长
  181. * @param {number} 图片浏览器宽
  182. * @param {element} 图片浏览器
  183. * @param {element} 图片
  184. */
  185. PJ: function (UW, UH, UIOD, UIID) {
  186. var _UDPD = $(UIID).Parent();
  187. //设置长宽
  188. _UDPD.style.height = UH ? UH + "px" : "";
  189. _UDPD.style.width = UW ? UW + "px" : "";
  190. //图片区中定位
  191. (!this.Iss) && (UIOD.style.width = _UDPD.style.width);
  192. (UH) && ($(_UDPD).css("marginTop", ((UH = (($(_UDPD).Parent().offsetHeight - UH) / 2)) > 0 ? UH : 0) + "px"));
  193. },
  194. /**
  195. * 滚动设置
  196. *
  197. * @param {string} 上传成功回调函数
  198. * @param {number} 上传成功回调函数
  199. * @param {function} 回调参数
  200. */
  201. Rotate: function (UV, UIOD, UT) { //图片角度设置
  202. //UV是用来判断旋转的角度
  203. var _UIMG = $(UT.UIMG),
  204. _UDPD = _UIMG.Parent(),
  205. _UWH = [_UDPD.offsetWidth, _UDPD.offsetHeight];
  206. (UV) && (_UWH.reverse());
  207. UV = UT.R + UV; UV = UV >= 4 ? 0 : UV; UV = UV < 0 ? 3 : UV;
  208. UT.R = UV; _UWH[2] = UV % 2 ? ((_UWH[(UV - 1) / 2] / 2) + "px") : "center"; //角度
  209. _UIMG.addAttrArray({ style: {
  210. "filter": "Progid:DXImageTransform.Microsoft.BasicImage(Rotation=" + UV + ")",
  211. "transformOrigin": _UWH[2] + " " + _UWH[2], "WebkitTransform": "rotate(" + UV * 90 + "deg)",
  212. "MozTransform": "rotate(" + UV * 90 + "deg)",
  213. "transform": "rotate(" + UV * 90 + "deg)",
  214. "OTransform": "rotate(" + UV * 90 + "deg)"
  215. }
  216. }); //设定值
  217. UT.PJ(_UWH[0], _UWH[1], UIOD, _UIMG[0]);
  218. U.D.PopupWindow(UIOD); //图片定位调整 //重新定位
  219. },
  220. /**
  221. * 浏览点移动
  222. *
  223. * @param {element} 图片窗体
  224. * @param {object} 图片浏览器
  225. */
  226. MoveScroll: function (UDOD, UT) {//
  227. UDOD.setCapture(); //聚焦
  228. document.onmousemove = U.M.apply(UT, [[UT.Move, [UDOD, event.clientX, event.clientY, [UDOD.scrollTop, UDOD.scrollLeft], UT]]]); //移动处理
  229. document.onmouseup = U.M.apply(UT, [[UT.Up, [UDOD]]]); //释放处理
  230. },
  231. /**
  232. * 滚动设置
  233. *
  234. * @param {element} 图片窗口
  235. * @param {number} 窗体left
  236. * @param {number} 窗体 top
  237. * @param {array} 所在区域滚动条
  238. ----------[0] top滚动条
  239. ----------[1] left 滚动条
  240. * @param {object} 图片浏览器
  241. */
  242. Move: function (UDOD, UX, UY, UTL, UT) {//移动浏览
  243. UT.CTF = false; //进行了移动 不允许关闭
  244. $(UDOD).addAttrArray({
  245. "scrollTop": UTL[0] - (event.clientY - UY),
  246. "scrollLeft": UTL[1] - (event.clientX - UX)
  247. }); //滚动范围
  248. },
  249. /**
  250. * 滚动设置
  251. *
  252. * @param {string} 上传成功回调函数
  253. */
  254. Up: function (UDOD) {//取消
  255. UDOD.releaseCapture(); //释放焦点
  256. document.onmousemove = document.onmouseup = null;
  257. },
  258. /**
  259. * 下载
  260. *
  261. * @param {string} 文件名
  262. */
  263. Download: function (FN) {
  264. FN = FN.replace(US.fs, ""); //获取文件名
  265. U.Dk.RE.ODL(FN, "1473用户图片.jpg"); //下载
  266. },
  267. /**
  268. * 移除窗口或者隐藏窗口
  269. *
  270. * @param {element} 窗体对象
  271. * @param {object} 图片浏览器对象
  272. * @param {boolean} 是否移除还是隐藏
  273. */
  274. Close: function (UIOD, UT, UTF) {//
  275. U.D.CloseWindow(UIOD || this.UIOD, UTF ? "remove" : false); //移除窗口
  276. this.ET.splice(this.ET.indexOf(UT), 1); //删除
  277. },
  278. /**
  279. * 滚动设置
  280. *
  281. * @param {string} 图片窗体
  282. * @param {number} 图片区域
  283. * @param {function} 图片浏览器对象
  284. * @param {object} 图片对象
  285. ----------[Thm] 图片小图
  286. ----------[Img] 图片原图
  287. */
  288. Ready: function (UIOD, UIID, T, UDE) {//图片获取具体尺寸
  289. if (UIOD.style.display != "none" && (UDE && UDE["Thm"] == UIID.src || !UDE || !UDE["Thm"])) { //加载范围不在范围
  290. //图片框大小处理
  291. $[UIID, UIID.parentNode].addAttrArray({ "style": { "width": this.width + "px", "height": this.height + "px"} });
  292. T.W = this.width;
  293. T.H = this.height;
  294. //设置位置居中
  295. T.PJ(T.W, T.H, UIOD, UIID);
  296. U.D.PopupWindow(UIOD);
  297. return true;
  298. }
  299. else { return false; }
  300. },
  301. /**
  302. * 图片缓冲中
  303. *
  304. * @param {element} 图片浏览器窗体
  305. * @param {element} 图片元素
  306. * @param {object} 回调参数
  307. * @param {function} 回调参数
  308. */
  309. Load: function (UIOD, UIID, T, UDE) {//
  310. if (this.src && UIOD.style.display != "none" && (UDE && UDE["Thm"] == UIID.src || !UDE || !UDE["Thm"])) {
  311. var _UDPD = $(UIID).Parent(),
  312. _UWH = this.Iss ? [_UDPD.offsetWidth, _UDPD.offsetHeight] : [US.Width, US.Height];
  313. //缓存的时候设置样式 同时大小变化
  314. $(UIID).addAttrArray({ "src": this.src, "style": { "MozOpacity": "1", "Khtml-opacity": "1", "opacity": "1", "filter": "alpha(opacity=100)"} });
  315. T.W = this.width;
  316. T.H = this.height;
  317. UIOD = $(UIOD);
  318. T.Zoom(Math.min(Math.min(T.W, _UWH[0]) / this.width, Math.min(T.H, _UWH[1]) / this.height) * 100, UIOD[0], T); //默认原大小
  319. UIOD.Center(); //居中弹出
  320. }
  321. },
  322. /**
  323. * 图片加载失败
  324. *
  325. * @param {string} 上传成功回调函数
  326. * @param {number} 上传成功回调函数
  327. */
  328. Error: function (URL, ITF) {//
  329. var UIOD;
  330. var _UIID = this.UIMG;
  331. ITF = ITF || 0;
  332. ITF++; //添加的图片
  333. if (ITF < 3 && this.TF == 2) { //图片重新加载处理
  334. U.M.imgReady(URL + "?&n=" + ITF, U.M.apply(null, [[this.Ready, [this.UIOD, _UIID, this]]]),
  335. U.M.apply(null, [[this.Load, [this.UIOD, _UIID, this]]]), U.M.apply(this, [[this.Error, [URL, ITF]]]));
  336. }
  337. else {//加载错误图片
  338. U.Alert("图片丢失");
  339. $(_UIID).css({ "width": "auto", "height": "auto" });
  340. U.M.ImgError(_UIID, (this.TF || 1));
  341. this.Zoom(100, this.UIOD, this);
  342. U.D.PopupWindow(this.UIOD)
  343. }
  344. }
  345. };
  346. //#endregion