taskbar.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. /**
  2. * 任务栏管理系统
  3. */
  4. Namespace.register("U.MD.D.T.taskbar"); //任务栏 命名空间
  5. /**
  6. * 任务管理函数
  7. * @param applyinfo {object} 任务信息
  8. * 形如:{
  9. * id: _taskId, //任务识别id
  10. * backgroundPostion: _taskbar[0], //任务图标定位
  11. * name: _taskbar[1], //任务名称
  12. * forms: _taskbar[2], //任务所在的窗体
  13. * click: function () { U.MD.D.I.openApplication(str, obj); } //任务点击打开的函数
  14. * }
  15. * @param taskbarEle 任务管理器所在的元素 默认为$("#U_MD_D_T_taskbar_Bar_Main")[0]元素
  16. */
  17. U.MD.D.T.taskbar = function (applyinfo, taskbarEle) {
  18. taskbarEle = taskbarEle || U.selectEl("#U_MD_D_RW")[0]; //任务管理器所在的元素
  19. var _tasks = U.selectEl('#U_MD_D_T_taskbar_' + applyinfo.id, taskbarEle)[0]; //查找当前任务是否存在
  20. //如果不存在则创建任务
  21. if (!_tasks) {
  22. //创建任务
  23. U.MD.D.T.taskbar.create(applyinfo, taskbarEle);
  24. //检查任务是否过多
  25. U.MD.D.T.taskbar.multitask(taskbarEle);
  26. }
  27. else {
  28. _tasks.forms = applyinfo.forms;
  29. }
  30. }
  31. //是否触发拖动监听变量
  32. U.MD.D.T.taskbar.drag = 0;
  33. /**
  34. * 任务创建函数
  35. * @param applyinfo {object} 任务信息 与任务管理函数参数相同
  36. * @param taskbarEle {element} 任务管理器所在的元素 默认为$("#U_MD_D_T_taskbar_Bar_Main")[0]元素 与任务管理函数参数相同
  37. */
  38. U.MD.D.T.taskbar.create = function (applyinfo, taskbarEle) {
  39. if (taskbarEle) {
  40. //动态创建任务
  41. var _task = $$("div", { id: "U_MD_D_T_taskbar_" + applyinfo.id, className: "U_MD_D_BZMO", title: applyinfo.name, "forms": applyinfo.forms });
  42. var _taskMain = $$("div", {
  43. className: "U_MD_D_BZMOA",
  44. //绑定点下事件 勇于拖动监听
  45. onmousedown: U.UF.C.apply(null, function () { U.MD.D.T.taskbar.dragClose(_taskMain); }),
  46. //绑定点击事件 需判断是否在拖动状态
  47. onclick: function () {
  48. if (!(U.MD.D.T.taskbar.drag > 1)) {
  49. applyinfo.click();
  50. }
  51. U.MD.D.T.taskbar.drag = 0;
  52. }
  53. }, _task);
  54. //动态创建任务图标
  55. // switch (applyinfo.name) {//根据不同的点击事件创建不同的任务图标
  56. // case "文档":
  57. // $$("div", { className: " U_TaskbarImg U_TaskbarImg1" }, _taskMain);
  58. // break;
  59. // case "系统设置":
  60. // $$("div", { className: " U_TaskbarImg U_TaskbarImg2" }, _taskMain);
  61. // break;
  62. // case "查找好友":
  63. // $$("div", { className: " U_TaskbarImg U_TaskbarImg3" }, _taskMain);
  64. // break;
  65. // case "Excel":
  66. // $$("div", { className: "U_TaskbarImg U_TaskbarImg4" }, _taskMain);
  67. // break;
  68. // case "网盘":
  69. // $$("div", { className: " U_TaskbarImg U_TaskbarImg5" }, _taskMain);
  70. // break;
  71. // case "互联办公":
  72. // $$("div", { className: " U_TaskbarImg U_TaskbarImg6" }, _taskMain);
  73. // break;
  74. // case "文本":
  75. // $$("div", { className: "U_TaskbarImg U_TaskbarImg7" }, _taskMain);
  76. // break;
  77. // case "音乐播放器":
  78. // $$("div", { className: "U_TaskbarImg U_TaskbarImg8" }, _taskMain);
  79. // }
  80. $$("div", { className: "U_MD_D_BZMOI U_Img", style: applyinfo.style }, _taskMain);
  81. //动态创建任务名称
  82. // $$("div", { className: "U_MD_D_BZMON U_MD_D_Text_Abbreviation", innerHTML: applyinfo.name }, _taskMain);
  83. var _taskName = $$("div", {
  84. className: "U_MD_D_T_taskbar_Name",
  85. style: { "position": "absolute", "left": "-26px", "bottom": "83px" }/*,
  86. innerHTML: applyinfo.name*/
  87. }, _task);
  88. $$("div", {
  89. className: "U_MD_D_BZMON U_MD_D_Text_Abbreviation",
  90. style: { "float": "left", "width": "100px", "margin-top": "7%", "color": "#FFFFFF", "font-family": "MicrosoftYaHei" },
  91. innerHTML: applyinfo.name
  92. }, _taskName);
  93. $$("div", { className: "U_MD_D_T_taskbar_Close", style: { "display": "none" }, innerHTML: "x", onclick: function () { U.UF.EV.stopBubble(); U.MD.D.T.taskbar.close(applyinfo) } }, _taskMain);
  94. $$("div", { className: "U_MD_D_T_taskbar_Close", innerHTML: "x", onclick: function () { U.UF.EV.stopBubble(); U.MD.D.T.taskbar.close(applyinfo) } }, _taskName);
  95. //添加到任务栏的最前面
  96. if (taskbarEle) {
  97. U.selectEl(taskbarEle).append(_task, 0, taskbarEle.firstChild);
  98. }
  99. //任务栏中大于或等于28个时,才出现上下分页按钮;
  100. if ($(".U_MD_D_BZMOA").length >= 28) {
  101. U.selectEl(".U_MD_D_RW_R")[0].style.display = "block";
  102. } else {
  103. U.selectEl(".U_MD_D_RW_R")[0].style.display = "none";
  104. }
  105. }
  106. }
  107. //当前页监听
  108. U.MD.D.T.taskbar.page = 1;
  109. //最大页码
  110. U.MD.D.T.taskbar.maxPage = 1;
  111. //每页最多放置任务数
  112. U.MD.D.T.taskbar.pageNum = 1;
  113. /**
  114. * 检查任务过多情况
  115. * @param taskbarEle {element} 任务管理器所在的元素 默认为$("#U_MD_D_T_taskbar_Bar_Main")[0]元素 与任务管理函数参数相同
  116. */
  117. U.MD.D.T.taskbar.multitask = function (taskbarEle) {
  118. //每页最多放置任务数
  119. U.MD.D.T.taskbar.pageNum = Math.floor($(taskbarEle).width() / 65);
  120. //获取所有任务
  121. var _tasks = U.selectEl(taskbarEle).Child();
  122. //获取任务总数
  123. var _tasksTotal = _tasks.length;
  124. //判断是否为多页情况
  125. if (_tasksTotal > U.MD.D.T.taskbar.pageNum) {
  126. //计算最大总共有多少页
  127. U.MD.D.T.taskbar.maxPage = Math.ceil(_tasksTotal / U.MD.D.T.taskbar.pageNum);
  128. }
  129. U.MD.D.T.taskbar.page = 1;
  130. U.MD.D.T.taskbar.switchPage(0);
  131. }
  132. /**
  133. * 多任务切换页面
  134. * @param mark {number} 页码标记 在前台页上加或者减多少页
  135. * @param taskbarEle {element} 任务管理器所在的元素 默认为$("#U_MD_D_T_taskbar_Bar_Main")[0]元素 与任务管理函数参数相同
  136. */
  137. U.MD.D.T.taskbar.switchPage = function (mark, taskbarEle) {
  138. //任务管理器位置
  139. taskbarEle = taskbarEle || U.selectEl("#U_MD_D_RW")[0];
  140. //页面切换设置
  141. U.MD.D.T.taskbar.page += mark;
  142. //页面最小值限制
  143. if (U.MD.D.T.taskbar.page < 1) { U.MD.D.T.taskbar.page = 1; }
  144. //页面最大值限制
  145. if (U.MD.D.T.taskbar.page > U.MD.D.T.taskbar.maxPage) { U.MD.D.T.taskbar.page = U.MD.D.T.taskbar.maxPage; }
  146. //获取所有任务
  147. var _tasks = U.selectEl(taskbarEle).Child();
  148. //计算当前页面从第几个任务开始显示
  149. var _startLength = (U.MD.D.T.taskbar.page - 1) * U.MD.D.T.taskbar.pageNum;
  150. //计算当前页面从第几个任务结束显示
  151. var _endLength = Math.min(U.MD.D.T.taskbar.page * U.MD.D.T.taskbar.pageNum, _tasks.length);
  152. //影藏所有任务
  153. U.selectEl($(taskbarEle).Child()).css('display', 'none');
  154. //循环显示当前页面的任务
  155. var i;
  156. for (_startLength; _startLength < _endLength; _startLength++) {
  157. U.selectEl(_tasks[_startLength]).css('display', 'block');
  158. }
  159. }
  160. /**
  161. * 任务关闭函数
  162. * @param applyinfo {object} 任务信息
  163. */
  164. U.MD.D.T.taskbar.close = function (applyinfo) {
  165. var i,
  166. _child = U.selectEl("#U_MD_D_RW").Child(),
  167. _form = U.UF.C.isElement(applyinfo.forms) ? applyinfo.forms : applyinfo.forms.form;
  168. //执行窗体关闭函数
  169. if (applyinfo.forms) {
  170. U.UF.F.closeWindow(_form, "remove");
  171. }
  172. //通过applyinfo删除的模式
  173. if (applyinfo.id) {
  174. //删除任务
  175. U.selectEl('#U_MD_D_T_taskbar_' + applyinfo.id).remove();
  176. }
  177. else {
  178. //循环找出需要移除的form窗体
  179. for (i = 0; i < _child.length; i++) {
  180. if (_child[i].forms == _form) {
  181. U.selectEl(_child[i]).remove();
  182. }
  183. }
  184. }
  185. }
  186. /**
  187. * 清空任务管理器
  188. * @param taskEle {Element} 任务管理器位置
  189. */
  190. U.MD.D.T.taskbar.clear = function (taskEle) {
  191. //任务管理器位置
  192. taskEle = taskEle || U.selectEl("#U_MD_D_RW")[0];
  193. //循环执行所有任务的关闭点击事件
  194. var _i, _tasksClose = U.selectEl('.U_MD_D_T_taskbar_Close', taskEle);
  195. for (_i = 0; _i < _tasksClose.length; _i++) {
  196. _tasksClose[_i].onclick();
  197. }
  198. }
  199. /**
  200. * 任务拖拽关闭函数
  201. * @param taskEle {Element} 被操作任务的元素
  202. */
  203. U.MD.D.T.taskbar.dragClose = function (taskEle) {
  204. U.MD.D.T.taskbar.drag = 0;
  205. //获取鼠标位置 定义该位置为起始位置
  206. //U.MD.D.T.taskbar.stratX = U.UF.EL.getMousePosition().x;
  207. U.MD.D.T.taskbar.stratY = U.UF.EL.getMousePosition().y;
  208. //记录当前样式
  209. U.MD.D.T.taskbar.preStyle = U.selectEl(taskEle).css('cssText');
  210. //设置元素绝对定位
  211. var _taskEleCssPostion = U.selectEl(taskEle).css("postion");
  212. if (_taskEleCssPostion == "static" || !_taskEleCssPostion) { U.selectEl(taskEle).css("position", "absolute") }; //改G
  213. //设置置顶
  214. U.selectEl(taskEle).css("z-index", 9999);
  215. //绑定事件
  216. U.MD.D.T.taskbar.bindDragEvent(taskEle);
  217. }
  218. /**
  219. * 拖拽事件绑定
  220. */
  221. U.MD.D.T.taskbar.bindDragEvent = function (taskEle) {
  222. var _event = {
  223. "mousemove": function () {
  224. //执行拖拽事件
  225. U.MD.D.T.taskbar.dragMove(taskEle);
  226. //绑定鼠标离开元素事件,防止失焦后元素不受控制
  227. U.selectEl(taskEle).mouseleave(function () {
  228. U.MD.D.T.taskbar.dragEnd(taskEle);
  229. });
  230. //设置拖拽开始
  231. U.MD.D.T.taskbar.drag++;
  232. },
  233. "mouseup": function () {
  234. //执行拖拽结束函数
  235. U.MD.D.T.taskbar.dragEnd(taskEle);
  236. //解绑当前绑定的函数
  237. U.selectEl(taskEle).unbind(_event);
  238. //清楚
  239. U.selectEl(taskEle).mouseleave(null);
  240. }
  241. };
  242. //绑定事件
  243. U.selectEl(taskEle).bind(_event);
  244. }
  245. /**
  246. * 拖拽函数
  247. */
  248. U.MD.D.T.taskbar.dragMove = function (taskEle) {
  249. //计算拖动距离
  250. //U.MD.D.T.taskbar.dragX = U.UF.EL.getMousePosition().x - U.MD.D.T.taskbar.stratX;
  251. U.MD.D.T.taskbar.dragY = U.MD.D.T.taskbar.stratY - U.UF.EL.getMousePosition().y;
  252. //根据拖动距离计算透明度 最大拖动距离为100
  253. //var _opacity = 100 - U.MD.D.T.taskbar.dragX;
  254. var _opacity = 100 - U.MD.D.T.taskbar.dragY;
  255. //限制透明度值最小为1
  256. if (_opacity < 1) { _opacity = 1 };
  257. //设置CSS透明度属性
  258. U.selectEl(taskEle).css({
  259. //left: U.MD.D.T.taskbar.dragX + "px",
  260. bottom: U.MD.D.T.taskbar.dragY + "px",
  261. filter: "alpha(opacity=" + _opacity + ")",
  262. "-ms-filter": "progid:DXImageTransform.Microsoft.Alpha(Opacity=" + _opacity + ")", //ie兼容设置
  263. "-moz-opacity": _opacity / 100,
  264. "-khtml-opacity": _opacity / 100, //其他浏览器兼容 firefox safari、chrome
  265. "opacity": _opacity / 100
  266. });
  267. }
  268. /**
  269. * 拖拽结束函数
  270. */
  271. U.MD.D.T.taskbar.dragEnd = function (taskEle) {
  272. if (U.MD.D.T.taskbar.dragY > 50) {
  273. //若拖动距离大于40则执行关闭任务函数
  274. U.selectEl('.U_MD_D_T_taskbar_Close', taskEle)[0].onclick();
  275. }
  276. else {
  277. //否则执行打开函数,并设置回元素的样式
  278. U.selectEl(taskEle).css("cssText", U.MD.D.T.taskbar.preStyle);
  279. //taskEle.click();
  280. }
  281. }
  282. $(window).bind('onsize', U.MD.D.T.taskbar.multitask);