U.DC.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. /*拉伸窗体处理函数区域
  2. 此处的命名空间和U.DD.js相同 因为功能是属于一个模块下的
  3. */
  4. //#region 拉伸窗体
  5. Namespace.register("U.D");
  6. //虚拟框
  7. U.D.Masklayer = function () {
  8. return $$("div", { "style": { "cssText": "width:100%;height:100%;position:absolute;top:0;left:0;"} }, document.body);
  9. }
  10. /*
  11. * 拖动框
  12. *
  13. * @param {element} 需要创建虚拟框的元素
  14. * @param {object} 元素的位置
  15. ----------参数为GetElementInfo 返回值
  16. */
  17. U.D.foundVirtualBox = function (UDOD, UE) {
  18. UDOD = $(UDOD);
  19. UE = UE || UDOD.GetElementInfo(); //获取元素的位置
  20. return $$("div", { "style": { "cssText": "pointer-events:none;border:2px solid Gray;position:absolute;top:" + (UE["OT"] - 2) + "px;left:" + (UE["OL"] - 2) + "px;width:" + (UE["OW"]) + "px;height:" + (UE["OH"]) + "px;z-index:" + (US.ZV + 10)} }, UDOD.Parent());
  21. }
  22. /*
  23. * 拉伸函数处理
  24. *
  25. * @param {element} 需要拉伸的元素
  26. * @param {function} 拉伸回调函数
  27. ----------参数为GetElementInfo 返回值
  28. */
  29. U.D.AddOM = function (UDOD, UCB) {
  30. if (!$(".UD_W_WT", UDOD)[0]) { //拉伸对象不存在
  31. var i,
  32. _UTE = U.D.RCDG(UDOD, null, UCB), //创建拉伸处理
  33. _UTP = "UD_W_WT",
  34. _UDE = [["H", "up"], ["MR", "right"], ["B", "down"], ["ML", "left"], ["HL", "topright"], ["BR", "bottomright"], ["BL", "bottomleft"], ["HR", "topleft"]], //拉伸所有的监视 和 className 的设置
  35. _UDTD = $$("div", { "className": "UD_W_WT" }); //新建立一个容器
  36. for (i = 0; i < _UDE.length; i++) { //添加上下左右处理元素
  37. $$("div", { "className": _UTP + "_" + _UDE[i][0], "onmousedown": U.M.apply(_UTE, [[_UTE.set, [_UDE[i][1]]]]) }, _UDTD);
  38. }
  39. UDOD.appendChild(_UDTD); //添加拉伸元素
  40. }
  41. }
  42. /*
  43. * 拉伸执行
  44. *
  45. * @param {element} 需要拉伸的元素
  46. * @param {string} 需要调用的回调
  47. * @param {function} 拉伸回调函数
  48. ----------参数为GetElementInfo 返回值
  49. */
  50. U.D.RCDG = function (UDOD, UTF, UCB) {
  51. return new U.D.RCDG.init(UDOD, UTF, UCB);
  52. }
  53. /*
  54. * 拉伸执行
  55. *
  56. * @param {element} 需要拉伸的元素
  57. * @param {string} 需要调用的回调
  58. * @param {function} 拉伸回调函数
  59. */
  60. U.D.RCDG.init = function (UDOD, UTF, UCB) { //拖动的拉伸
  61. /*
  62. 注释:
  63. -----UCB 回调函数
  64. -----UDOD 拉伸的原函数
  65. */
  66. U.Ut.AddObj(this, { UCB: UCB, UDOD: UDOD });
  67. (UTF) && (this.set(UTF)); //设置回调
  68. }
  69. U.D.RCDG.init.prototype = {
  70. /*
  71. * 拉伸执行
  72. *
  73. * @param {element} 需要拉伸的元素
  74. * @param {string}
  75. * @param {function} 拉伸回调函数
  76. */
  77. set: function (UTF) {
  78. var i, _UDMD,
  79. _UDOD = this.UDOD,
  80. _UE = U.M.GetElementAllInfo(_UDOD), //当前位置
  81. _UDE = [["move", UTF], ["up", "mup"]];
  82. if (UTF && event.button != 2 && (_UE["OH"] != US.Height || _UE["OW"] != US.Width)) { //非右键
  83. //内部使用变量设置
  84. U.Ut.AddObj(this, {
  85. UMD: (_UDMD = U.D.Masklayer()), //拉伸虚拟框
  86. UTF: UTF, //拖动时回调函数
  87. UTOD: U.D.foundVirtualBox(_UDOD), //虚拟框
  88. E: _UE, //当前的位置大小
  89. H: _UE.H, //原高
  90. W: _UE.W, //原长
  91. T: _UE.OT, //原top
  92. L: _UE.OL//原left
  93. });
  94. this.UTOD.setCapture(); //创建使用的变量
  95. //虚拟框和拖动看置顶
  96. U.D.SetDTop(this.UTOD);
  97. U.D.SetDTop(_UDMD); //虚拟框
  98. //拖动元素监视
  99. for (i = 0; i < _UDE.length; i++) {
  100. document["onmouse" + _UDE[i][0]] = U.M.apply(this, [[this[_UDE[i][1].toLocaleLowerCase()]]]);
  101. }
  102. //返回拖动对象
  103. return this; //设置拉伸
  104. }
  105. },
  106. //向上拉伸
  107. up: function () {
  108. var _UE = U.M.GetMousep(), //获取鼠标的位置
  109. _UT = Math.min(Math.max(_UE["Y"], 0), this.T + this.H - 4), //获取拉伸头部的top位置
  110. _UH = this.H + (this.T - _UT); //计算高度
  111. $(this.UTOD).addAttrArray({ "style": { "cssText": "top:" + (_UT - 2) + "px;height:" + (_UH) + "px"} }); //设置样式
  112. },
  113. //下面拉伸
  114. down: function () {
  115. var _UE = U.M.GetMousep(); //鼠标所在的位置
  116. _UE["Y"] = Math.max(Math.min(_UE["Y"], US.Height), this.T); //获取拉伸的位置
  117. this.UTOD.style.height = (_UE["Y"] - this.T) + "px"; //拉伸后的大小处理
  118. },
  119. //左边拉伸
  120. left: function () {
  121. var _UE = U.M.GetMousep(), //鼠标所在的位置
  122. _UL = Math.min(Math.max(_UE["X"], 0), this.L + this.W - 4), //左边位置处理
  123. _UW = this.W + this.L - _UL; //长度变化
  124. $(this.UTOD).addAttrArray({ "style": { "cssText": "left:" + (_UL - 2) + "px;width:" + (_UW) + "px"} });
  125. },
  126. //右边
  127. right: function () {
  128. var _UE = U.M.GetMousep(); //鼠标所在的位置
  129. _UE["X"] = Math.max(Math.min(_UE["X"], US.Width), this.L); //右边位置处理
  130. this.UTOD.style.width = (_UE["X"] - this.L) + "px"; //内容大小处理
  131. },
  132. //左上
  133. topleft: function () {
  134. this.up(); //向上拉伸
  135. this.left(); //左边拉伸
  136. },
  137. //右上
  138. topright: function () {
  139. this.up(); //向上拉伸
  140. this.right(); //右边拉伸
  141. },
  142. //左下
  143. bottomleft: function () {
  144. this.down(); //向下拉伸
  145. this.left(); //向左拉伸
  146. },
  147. //右下
  148. bottomright: function () {
  149. this.down(); //向下拉伸
  150. this.right(); //右边拉伸
  151. },
  152. //结束拉伸
  153. mup: function () {
  154. var i, _UPE = this.E.PD,
  155. _UBE = this.E.BD,
  156. _UDTD = $(this.UTOD), //拉伸元素
  157. _UCE = U.M.GetElementAllInfo(this.UTOD), //拉伸元素的大小
  158. _UDE = [_UCE["W"], _UCE["H"]];
  159. //设置得到的位置和大小
  160. for (i = 0; i < _UPE.length; i++) {
  161. _UDE[(i + 1) % 2] -= (_UPE[i] + _UBE[i]);
  162. }
  163. //设置拉伸元素
  164. $(this.UDOD).addAttrArray({ "style": { "cssText": "left:" + (_UCE["OL"] + 2) + "px;top:" + (_UCE["OT"] + 2) + "px;width:" + _UDE[0] + "px;height:" + _UDE[1] + "px"} }); //设
  165. //清空
  166. $(_UDTD).remove();
  167. _UDTD[0].releaseCapture();
  168. document.onmousemove = document.onmouseup = null;
  169. $(this.UMD).remove();
  170. //回调设置
  171. U.D.withf(this.UCB, _UDE); //清空 //执行回调
  172. }
  173. }
  174. /*
  175. * 回调执行
  176. *
  177. * @param {object} 回调函数或者参数
  178. * @param {object} 回调的参数
  179. */
  180. U.D.withf = function (UAE, UDE) {
  181. if (UAE) {
  182. var i, j, k, _UCE, _UDOD,
  183. _UKE = {};
  184. for (i in UAE) {
  185. if (UAE.hasOwnProperty(i)) {
  186. //处理元素共同变化处理 这个会更加最大拖拉的元素 自适应
  187. if (i == "with") {
  188. for (j = 0; j < UAE[i].length; j++) {
  189. _UCE = UAE[i][j];
  190. _UDOD = _UCE["Element"]; //获取需要变化的元素集
  191. for (k in _UCE) {
  192. if (_UCE.hasOwnProperty(k) && k != "Element") { //变化的样式处理
  193. _UKE[k] = _UCE[k] + UDE[k == "width" ? 0 : 1];
  194. }
  195. }
  196. $(_UDOD).addAttrArray({ style: _UKE });
  197. }
  198. }
  199. //直接回调自己处理
  200. else { U.M.apply(null, UAE[i])(UDE); } //执行回调
  201. }
  202. }
  203. }
  204. }
  205. //#endregion