U.DD.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589
  1. /*
  2. 此处的命名空间和U.DD.js相同 因为功能是属于一个模块下的
  3. */
  4. //#region 拖动区域
  5. Namespace.register("U.D");
  6. //#region 带虚拟框的拖动
  7. /*
  8. * 拖动函数处理
  9. *
  10. * @param {element} 需要拖动的元素
  11. * @param {function} 拖动回调函数
  12. * @param {object} 拖动参数
  13. ----------参数为GetElementInfo 返回值
  14. * @return {object} 拖动对象
  15. */
  16. U.D.DragMouseDown = function (UDOD, UCB, UDE) {
  17. if (event.button < 2) { //判断左键使用
  18. var _UTE = new U.D.DragMouseDown.init(UDOD, UCB, UDE),
  19. _UKE = {//拖动事件处理
  20. "mousemove": U.M.apply(_UTE, _UTE.Drag), //move事件处理
  21. "mouseup": U.M.apply(_UTE, _UTE.DragUp) //up事件处理
  22. };
  23. //绑定事件
  24. U.Ut.AddObj(_UTE, _UKE); //给拖动方法添加新的事件。
  25. _UTE.create(); //创建拖动参数
  26. $(document).bind(_UKE); //绑定拖动事件
  27. //返回对象
  28. return (U.D.DragMouseDown.ST = _UTE);
  29. }
  30. }
  31. /*
  32. * 初始化拖动等待拖动
  33. *
  34. * @param {element} 需要拖动的元素
  35. * @param {function} 拉伸回调函数
  36. * @param {object} 拖动参数
  37. * @param {object} 拉伸回调函数
  38. ----------参数为GetElementInfo 返回值
  39. */
  40. U.D.DragMouseDown.init = function (UDOD, UCB, UDE, UCE) {
  41. (UCE && UCE.start) && (UCE.start()); //初始化回调
  42. this.set(UCE);
  43. //参数设置和说明
  44. this.set({
  45. max: (UDE && UDE.MaxLeft) ? UDE : null, //最大的拖动范围
  46. SO: UDOD, //拖动的元素
  47. AF: UCB, //回调函数
  48. ESO: event.srcElement //当前选中的元素
  49. });
  50. return this;
  51. }
  52. U.D.DragMouseDown.init.prototype = {
  53. /*
  54. * 设置拖动参数 上述有参数说明
  55. *
  56. * @param {object} 需要拖动的元素
  57. */
  58. set: function (UDE) {
  59. (UDE) && (U.Ut.AddObj(this, UDE));
  60. },
  61. /*
  62. * 创建虚拟框
  63. *
  64. */
  65. create: function () {
  66. var _UDOD = this.SO, //拖动元素
  67. _UHE = U.M.GetElementAllInfo(_UDOD); //拖动元素的位置
  68. //参数设置
  69. U.Ut.AddObj(this, {
  70. IsD: false, //是否为有效拖动
  71. XY: U.M.GetMousep(), //当前鼠标位置
  72. E: _UHE, //拖动元素大小等
  73. MaxTop: _UHE["PXT"] + US.Height - 10, //最大拖动top
  74. MaxLeft: _UHE["PXL"] + US.Width, //最大拖动left
  75. MinLeft: -_UHE["OW"] + 10, //最小拖动left
  76. MinTop: 0 //最小拖动top
  77. });
  78. //判断是否有最大范围设置
  79. (this.max) && (this.IsMinAndMax());
  80. },
  81. /*
  82. * 限制拖动范围
  83. *
  84. * @param {object} 需要拖动的元素
  85. */
  86. IsMinAndMax: function (UDE) {
  87. U.Ut.AddObj(this,
  88. { "MaxLeft": this.E["PXL"] + UDE["MaxLeft"] || this.MaxLeft, //最大拖动left
  89. "MinLeft": UDE["MinLeft"] || this.MinLeft, //最小拖动left
  90. "MinTop": UDE["MinTop"] || this.MinTop, //最小拖动top
  91. "MaxTop": this.E["PXT"] + UDE["MaxTop"] || this.MaxTop //最大拖动top
  92. }); //设置拉伸的范围限制
  93. },
  94. //拖动时触发的函数
  95. Drag: function () {
  96. var i, _UHE, _UDTD, _UDMD,
  97. _UDOD = this.SO, //拖动元素
  98. _UDE = [["X", "Left", "L"], ["Y", "Top", "T"]], //设置参数
  99. _UME = this.E, //拖动元素原大小位置
  100. _UCE = this.XY,
  101. _UE = U.M.GetMousep(); //鼠标的位置
  102. (this.move) && (this.move(this)); //回调函数
  103. //循环判断设置 top left
  104. for (i = 0; i < _UDE.length; i++) {
  105. _UDE[i] = Math.min(Math.max(_UE[(_UHE = _UDE[i])[0]] - _UCE[_UHE[0]] + _UME["O" + _UHE[2]], this["Min" + _UHE[1]]), this["Max" + _UHE[1]]);
  106. }
  107. //第一次拖动的参数
  108. if (!this.IsD) {
  109. this.IsD = true; //设置正在拖动
  110. U.Ut.AddObj(this, {
  111. VDB: U.D.foundVirtualBox(_UDOD), //添加虚拟框
  112. UMD: U.D.Masklayer() //添加遮层
  113. });
  114. //绑定事件
  115. $(this.UMD).bind({
  116. mousemove: this.mousemove, //移动事件绑定
  117. mouseup: this.mouseup //释放事件
  118. });
  119. //遮罩置顶
  120. U.D.SetDTop(this.UMD);
  121. U.D.SetDTop(this.VDB);
  122. //鼠标聚焦处理
  123. this.VDB.setCapture();
  124. }
  125. //鼠标处理
  126. $(this.VDB).addAttrArray({ "style": { "cssText": "left:" + _UDE[0] + "px;top:" + _UDE[1] + "px;"} });
  127. },
  128. //拖动结束
  129. DragUp: function () {
  130. //事件释放
  131. $[document, this.UMD].unbind(
  132. {
  133. "mousemove": this.mousemove, //拖动变化使用
  134. "mouseup": this.mouseup //拖动结束
  135. });
  136. this.IsD = false; //设置结束
  137. //释放元素 同时元素定位
  138. if (this.VDB) {
  139. var _UDMD = this.UMD, //遮罩框
  140. _UDTD = this.VDB, //虚拟框
  141. _UDE = U.M.GetElementInfo(_UDTD); //拖动结束的位置
  142. _UDTD.releaseCapture();
  143. U.D.DragMouseDown.chche = U.D.DragMouseDown.ST = null;
  144. $[_UDMD, this.VDB].remove(); //元素移除 //事件结束
  145. $(this.SO).addAttrArray({ "style": { "cssText": "top:" + (_UDE["OT"] + 2) + "px;left:" + (_UDE["OL"] + 2) + "px;"} });
  146. U.D.withf(this.UCB); //执行回调
  147. }
  148. }
  149. }
  150. //#endregion
  151. //#region
  152. /*
  153. * 直接拖动元素不带虚拟框 一般常用于图标移动
  154. *
  155. * @param {element} 需要拖动的元素
  156. * @param {object} 拖动参数
  157. ----------[ST] 初始化回调函数
  158. * @return {object} 拖动对象
  159. */
  160. U.D.iconmove = function (UDOD, UDE) {
  161. if (event.button != 2) { //只有右键允许拖动
  162. var _UTE = new U.D.iconmove.init(UDOD, UDE);
  163. return _UTE;
  164. }
  165. }
  166. U.D.iconmove.init = function (UDOD, UDE) { //拖动开始
  167. if (UDOD) {
  168. var i, _UE = U.M.GetElementAllInfo($(UDOD)[0]), //拖动元素的位置
  169. _UKE = U.M.GetMousep(), //鼠标位置
  170. _UCE = this.UCE = {
  171. "mousemove": U.M.apply(this, this.move), //移动函数处理
  172. "mouseup": U.M.apply(this, this.up) //释放函数处理
  173. };
  174. (UDE && UDE["ST"]) && (UDE["ST"].call(this, UDOD)); //初始化回调
  175. //初始化参数
  176. U.Ut.AddObj(this, {
  177. IsD: false, //设置未拖动状态
  178. // UMD: U.D.Masklayer(), //虚拟框
  179. E: _UKE, //鼠标位置
  180. SO: UDOD, //拖动元素
  181. UE: _UE, //元素的位置
  182. UCF: UDE, //拖动传参
  183. MT: _UE["PXT"] + US.Height - 10, //拖动最大top
  184. ML: _UE["PXL"] + US.Width, MIL: -_UE["OW"] + 10, //拖动最大left
  185. MIT: 0 //最小拖动范围
  186. });
  187. //绑定设置
  188. UDOD.setCapture(); //事件聚焦
  189. $(document).bind(_UCE); //事件绑定
  190. U.D.SetDTop(this.UMD, true); //置顶
  191. $(UDOD).css("z-index", 9999); //当前拖动元素置顶
  192. return this;
  193. }
  194. }
  195. U.D.iconmove.init.prototype = {
  196. //移动效果
  197. move: function () {
  198. var i, _UTL,
  199. _UDOD = this.SO; //当前拖动元素处理
  200. _UE = U.M.GetMousep(), //当前拖动鼠标位置
  201. _UKE = this.E, //初始鼠标位置
  202. _UME = this.UE, //元素位置
  203. _UAE = [["X", "L"], ["Y", "T"]]; //变化top left对应参数
  204. U.M.StopBubble(); //阻止冒泡
  205. if (!this.UMD) {
  206. this.UMD = U.D.Masklayer();
  207. $(this.UMD).bind(this.UCE); //事件绑定
  208. }
  209. //计算获取位置
  210. for (i = 0; i < _UAE.length; i++) {
  211. _UTL = _UE[_UAE[i][0]] - _UKE[_UAE[i][0]];
  212. (Math.abs(_UTL) > 2) && (this.IsD = true);
  213. _UAE[i] = Math.min(Math.max(_UTL + _UME["O" + _UAE[i][1]], this["MI" + _UAE[i][1]]), this["M" + _UAE[i][1]]);
  214. }
  215. //设置值
  216. $(_UDOD).addAttrArray({ "style": { "cssText": "left:" + _UAE[0] + "px;top:" + _UAE[1] + "px"} }); //?
  217. (this.UCF && this.UCF["Move"]) && (this.UCF["Move"].apply(this, [_UDOD, _UAE, _UKE, _UE])); //回调
  218. this.ism = true;
  219. },
  220. //移动结束
  221. up: function () {
  222. var _UDOD = this.SO, //拖动元素
  223. _UFE = this.UCF; //回调函数
  224. U.M.StopBubble(); //阻止冒泡
  225. _UDOD.setCapture(); //事件聚焦
  226. //释放
  227. this.ism = null;
  228. $(this.UMD).remove(); //虚拟框移除
  229. $(document).unbind(this.UCE); //移除绑定
  230. $(_UDOD).css("z-index", ""); //去除置顶
  231. // //回调
  232. (_UFE && _UFE["UP"]) && (_UFE["UP"].apply(this, [_UDOD])); //回调函数处理
  233. setTimeout(function () { _UDOD.releaseCapture() }, 0); ; //鼠标聚焦移除
  234. }
  235. }
  236. //#endregion
  237. //#region 拖动选择区域
  238. /*
  239. * 直接拖动元素不带虚拟框 一般常用于图标移动
  240. *
  241. * @param {object} 拖动参数
  242. */
  243. U.D.DragSelectE = function (UDE) {
  244. if (event.button != 2) {
  245. var _UTE, _UCE, _UKE,
  246. _UDOD = UDE["SO"], //拖选区域的元素
  247. _UE = U.M.GetMousep(), //获取当前鼠标的位置
  248. _UTF = _UDOD.componentFromPoint(_UE["X"] + 2, _UE["Y"] + 2);
  249. //在滚动条内允许使用
  250. if (_UTF != "outside" && _UTF.indexOf("scroll") == -1) {
  251. _UTE = (new U.D.DragSelectE.init(UDE)).create().SetHover().event();
  252. return _UTE;
  253. }
  254. }
  255. else { //右键处理
  256. (U.D.DragE) && (U.D.DragE.SetHover());
  257. }
  258. }
  259. /*
  260. * 拖动开始区域
  261. *
  262. * @param {object} 拖动参数
  263. */
  264. U.D.DragSelectE.init = function (UDE) {
  265. var _UDOD = UDE["SO"],
  266. _UDTD = UDE["SSO"] || _UDOD,
  267. _USC = UDE["CS"];
  268. //拖动参数添加
  269. U.Ut.AddObj(this, {
  270. "EL": _UDOD,
  271. "SSO": _UDTD,
  272. "OS": _UDTD.onscroll,
  273. "CB": _UDOD.onmousedown,
  274. "CS": _USC,
  275. "PEL": U.M.GetStyle(_UDOD, "position") != "static" ? _UDOD : U.M.TOSP(_UDOD), "TC": [],
  276. "Fun": UDE["FUN"],
  277. "ElO": "",
  278. "ESO": "",
  279. "UT": "",
  280. "UL": "",
  281. "UW": "",
  282. "UH": "",
  283. "X": "",
  284. "Y": "",
  285. "TX": "",
  286. "TY": "",
  287. "PUX": "",
  288. "PUY": "",
  289. "W": "",
  290. "H": "",
  291. "T": "",
  292. "L": ""
  293. });
  294. }
  295. U.D.DragSelectE.init.prototype = {
  296. event: function (UTF) { //事件赋值
  297. var i, j, k, z, _USH, _UKE,
  298. //拖选处理 绑定4个时间 mousedown mousemove mouseup scroll
  299. _UCE = this.e = this.e || [[document, { "mousemove": ["Drag"], "mouseup": ["DragUp"]}], [this.SSO, { "scroll": ["CTA", "Drag"]}], [this["EL"], { "mousedown": ["Event"]}]];
  300. //拖选处理
  301. for (i = 0; i < _UCE.length; i++) {
  302. _UKE = _UCE[i]; (!U.Ut.isArray(_UKE[0])) && (_UKE[0] = [_UKE[0]]);
  303. //绑定事件处理
  304. for (j in _UKE[1]) {
  305. if (_UKE[1].hasOwnProperty(j)) {
  306. for (k = 0; k < _UKE[1][j].length; k++) { //绑定解除
  307. (U.Ut.isString(_UKE[1][j][k])) && (_UKE[1][j][k] = U.M.apply(this, [[this[_UKE[1][j][k]]]])); //设置函数
  308. for (z = 0; z < _UKE[0].length; z++) {
  309. $(_UKE[0][z])[(UTF ? "un" : "") + "bind"](j, _UKE[1][j][k]);
  310. }
  311. }
  312. }
  313. }
  314. }
  315. },
  316. //变化赋值
  317. CTA: function () {
  318. var _UXE = this.ElO = U.M.GetElementAllInfo(this.EL), //元素位置大小
  319. //设置元素的位置
  320. _UAE = {
  321. "PUX": this["PUX"],
  322. "PUY": this["PUY"]
  323. };
  324. //元素位置设置
  325. U.Ut.AddObj(this, { "PUX": _UXE["SL"] + _UXE["PXL"], "PUY": _UXE["ST"] + _UXE["PXT"] });
  326. if (_UAE["PUX"] !== "") {
  327. this.DBH({
  328. "UW": this.UW + (this["PUX"] - _UAE["PUX"]),
  329. "UH": this.UH + (this["PUY"] - _UAE["PUY"]),
  330. "UT": this.UT, "UL": this.UL
  331. });
  332. }
  333. return _UXE;
  334. },
  335. //创建托选
  336. create: function () {
  337. var i, _UKE, _UDTD,
  338. _UDOD = this.EL, //拖动的元素
  339. _UE = U.M.GetMousep(), //鼠标位置
  340. _UXE = this.CTA(); //获取大小和变量
  341. /*
  342. 设置大小位置
  343. C:拖选下的志愿时 TX:left TY:top
  344. */
  345. U.Ut.AddObj(this, {
  346. "C": $(_UDOD).Child(),
  347. "TX": _UXE.TX,
  348. "TY": _UXE.TY,
  349. "X": _UE.X - _UXE.TX + this["PUX"],
  350. "Y": _UE.Y - _UXE.TY + this["PUY"]
  351. });
  352. //允许拖选使用
  353. if ((_UDTD = this.C[0])) {
  354. _UKE = ["Left", "Top", "Right", "Bottom"];
  355. for (i = 0; i < _UKE.length; i++) {
  356. _UKE[i] = U.M.GetStyle(_UDTD, "margin" + _UKE[i]); _UKE[i] = (!_UKE[i] || _UKE[i] == "auto") ? 0 : parseInt(_UKE[i]);
  357. }
  358. /*
  359. 参数设置:
  360. W:拖选长 H:拖选宽 T:拖动的高度 L:拖动的left
  361. */
  362. U.Ut.AddObj(this, {
  363. "W": _UDTD.offsetWidth + _UKE[0] + _UKE[2],
  364. "H": _UDTD.offsetHeight + _UKE[1] + _UKE[3],
  365. "T": _UKE[1] + _UKE[3],
  366. "L": _UKE[0] + _UKE[2]
  367. });
  368. }
  369. //拖动元素
  370. this.ESO = $$("div", { "className": "UD_DSE", "style": { "cssText": "top:" + this.Y + "px;left:" + this.X + "px;zIndex:" + US.ZV + 1} }, _UDOD);
  371. return this;
  372. },
  373. Drag: function () {//拖动选择逻辑
  374. var _UDOD = this.EL,
  375. _UE = U.M.GetMousep(), //当前鼠标的位置获取
  376. _UT = Math.min(Math.max(_UE["Y"] - this.TY + this["PUY"], 0), Math.max(this.ElO["SH"], this.ElO["OH"]) - 2), //top
  377. _UL = Math.min(Math.max(_UE["X"] - this.TX + this["PUX"], 0), this.ElO["SW"] - 2), //left
  378. _UW = _UL - this.X, //选择的长
  379. _UH = _UT - this.Y; //选择的框
  380. //设置拖动最大最小的范围
  381. if (_UW < 0) { _UW = Math.abs(_UW); }
  382. else { _UL = this.X; }
  383. if (_UH < 0) { _UH = Math.abs(_UH); }
  384. else { _UT = this.Y; } //设置位置和大小
  385. this.DBH({
  386. "UW": _UW,
  387. "UH": _UH,
  388. "UT": _UT,
  389. "UL": _UL
  390. }); //设置大小位置
  391. },
  392. /*
  393. * 滚动大小变化设置
  394. *
  395. * @param {object} 选择的范围
  396. */
  397. DBH: function (UDE) {
  398. var _UE = {};
  399. $(this.ESO).addAttrArray({ "style": { "cssText": "width:" + UDE.UW + "px;height:" + UDE.UH + "px;top:" + UDE.UT + "px;left:" + UDE.UL + "px;"} }); //拉动大小变化
  400. U.Ut.AddObj(this, UDE); //添加属性处理
  401. //位置大小设置
  402. U.Ut.AddObj(_UE, {
  403. "X": UDE.UL,
  404. "Y": UDE.UT,
  405. "BX": UDE.UW + UDE.UL,
  406. "BY": UDE.UH + UDE.UT
  407. });
  408. this.IsLocation(_UE); //位置大小设置
  409. },
  410. /*
  411. * 选择元素逻辑范围逻辑
  412. *
  413. * @param {object} 选择的范围
  414. */
  415. IsLocation: function (UDE) {
  416. if (this.C[0]) {//有子元素
  417. var i, _UKE, _UDTD, _UTF,
  418. _ULE = this.GetLXY(UDE); //选择的元素
  419. //去除样式
  420. if (this.TC.length) {
  421. for (i = 0; i < this.TC.length; i++) {
  422. $(_UDTD).removeClass(this.CS);
  423. }
  424. }
  425. //重新生成选择元素
  426. this.TC = [];
  427. for (i = _ULE[0]; i < _ULE[1]; i++) {//生成
  428. if ((_UDTD = this.C[i])) {
  429. //计算范围进行判断是否需要选择钙元素
  430. _UTF = ((_UKE = i % _ULE[4]) >= _ULE[2]) && (_UKE <= _ULE[3]) && ((_UKE + 1) * this.W >= UDE["X"]);
  431. if (_UTF && (_UDTD.offsetTop > UDE["BY"] || (_UDTD.offsetTop + this.H - this.T < UDE.Y))) {
  432. _UTF = false;
  433. }
  434. $(_UDTD)[(_UTF ? "add" : "remove") + "Class"](this.CS); //去除css
  435. (_UTF) && (this.TC.push(_UDTD));
  436. }
  437. }
  438. U.D.DragE = this;
  439. }
  440. },
  441. /*
  442. * 获取元素选择范围
  443. *
  444. * @param {object} 选择的范围
  445. */
  446. GetLXY: function (ULE) {//
  447. var _UL, _UDE = [0, 0];
  448. _UDE[4] = _UL = Math.floor(this.ElO["SW"] / this.W); //每行占位的个数
  449. _UDE[0] = ((Math.floor(ULE["Y"] / this.H) - 1) * _UL); //开始的位置
  450. _UDE[1] = _UDE[0] + ((Math.ceil((ULE["BY"]) / this.H) - Math.floor(_UDE[0] / _UL)) * _UL); //结束的位置
  451. _UDE[2] = Math.min(Math.ceil(ULE["X"] / this.W), _UL) - 1; _UDE[3] = Math.min(Math.ceil(ULE["BX"] / this.W), _UL) - 1; return _UDE;
  452. },
  453. //左右键逻辑
  454. Event: function () {
  455. if (event.button == 2) {
  456. var i, _UHT, _UHL, _UTF,
  457. _UDCD = this.TC, _UE = U.M.GetMousep(), //鼠标位置
  458. _UT = _UE["Y"] - this.TY + this["PUY"], //鼠标在滚动掉的top
  459. _UL = _UE["X"] - this.TX + this["PUX"]; //鼠标在滚动掉的left
  460. //计算范围
  461. for (i = 0; i < _UDCD.length; i++) {
  462. if (((_UHT = _UDCD[i].offsetTop) <= _UT && (_UHT + this.H - this.T) >= _UT) && ((_UHL = _UDCD[i].offsetLeft) <= _UL && (_UHL + this.W) > _UL)) {
  463. _UTF = true;
  464. }
  465. }
  466. //如果是需要回调的元素
  467. if (_UTF) {
  468. (this.Fun) && (this.Fun(this.TC));
  469. }
  470. return !_UTF; //回调使用
  471. }
  472. },
  473. //结束的逻辑
  474. DragUp: function () {
  475. var _UDOD = this.EL;
  476. this.event(true);
  477. _UDOD.releaseCapture();
  478. _UDOD.removeChild(this.ESO); //去除事件
  479. },
  480. //释放变化
  481. SetHover: function () {
  482. var _UTE = U.D.DragE || this;
  483. (_UTE.TC && _UTE.TC.length) && ($(_UTE.TC).removeClass(this.CS)); //去除选择元素样式
  484. U.D.DragE = this.TC.length = 0;
  485. return this;
  486. }
  487. }
  488. //#endregion
  489. //#region 拖拉变化
  490. /*
  491. * 获取元素选择范围
  492. *
  493. * @param {object} 拖选的元素
  494. * @param {object} 拖选的传参
  495. */
  496. U.D.DragAb = function (UDOD, UDE) {
  497. if (UDOD) {
  498. UDE = UDE || {};
  499. new U.D.DragAb.init(UDOD, UDE); //初始化拖选
  500. }
  501. }
  502. /*
  503. * 拖动初始化
  504. *
  505. * @param {object} 拖选的元素
  506. * @param {object} 拖选的传参
  507. */
  508. U.D.DragAb.init = function (UDOD, UDE) {
  509. var _UDTD = $(UDOD),
  510. _UDSD = _UDTD.parentg(), //上级元素
  511. _UDPD = _UDTD.prev(), //上面的兄弟节点
  512. _UDND = _UDTD.next(); //下面的兄弟节点
  513. //添加初始化值
  514. U.Ut.AddObj(this, {
  515. UDPD: _UDSD, //上级元素
  516. w: _UDSD.width(), //当前长度
  517. pw: _UDSD.parentg().width(), //总长度
  518. UDOD: UDOD, //拖动的元素
  519. UE: U.M.GetMousep(), //鼠标的位置
  520. prev: _UDPD, //上面的兄弟节点
  521. next: _UDND, //下面的兄弟节点
  522. uw: [_UDPD.width(), _UDND.width()] //兄弟节点长度
  523. });
  524. //拖动参数设置
  525. U.Ut.AddObj(this, UDE);
  526. //聚焦
  527. UDOD.setCapture();
  528. //拖动元素
  529. $(document.body).bind({
  530. "mousemove": (this.move = U.M.apply(this, UDE.tf ? this.dragB : this.drag)),
  531. "mouseup": (this.mup = U.M.apply(this, this.up))
  532. });
  533. }
  534. U.D.DragAb.init.prototype = {
  535. //拖动左右使用
  536. drag: function () {
  537. var _UDVD = this.prev, //上级元素
  538. _UDND = this.next, //下面的兄弟节点
  539. _UW = this.uw, //不变的大小
  540. _UE = this.UE, //鼠标的位置
  541. _UME = U.M.GetMousep(); //当前处理的鼠标位置
  542. _UME["X"] = Math.min(Math.max(-_UW[0], _UME["X"] - _UE["X"]), _UW[1]); _UDVD.css("width", _UW[0] + _UME["X"] + "px"); _UDND.css("width", _UW[1] + _UME["X"] + "px"); //拖动大小处理
  543. (this.scb) && (this.scb()); //拖动回调
  544. },
  545. //拖动菜单
  546. dragB: function () {
  547. var _UW,
  548. _UDPD = this.UDPD, //上级元素
  549. _UDSD = this.prev, //上级元素
  550. _UPW = this.pw, //总长度
  551. _UW = this.uw[0], //上面兄弟节点的长度
  552. _UE = this.UE, //鼠标的位置
  553. _UME = U.M.GetMousep(); //鼠标位置
  554. _UME["X"] = Math.max(-_UW, _UME["X"] - _UE["X"]); //获取left
  555. _UDSD.css("width", _UW + _UME["X"] + "px"); //设置下级兄弟的长度
  556. _UDPD.css("width", (_UW = (_UME["X"] + this.w)) > this.pw ? _UW + "px" : this.pw + "px"); //设置上级兄弟的长度
  557. (this.scb) && (this.scb());
  558. },
  559. //拖动释放
  560. up: function () {
  561. this.UDOD.releaseCapture(); //释放聚焦
  562. $(document.body).unbind({ "mousemove": this.move, "mouseup": this.mup }); //释放拖动绑定
  563. (this.upcb) && (this.upcb()); //回调处理
  564. }
  565. }
  566. //#endregion