RoadFlow2.1 临时演示

roadui.menu.js 6.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. //右键菜单
  2. ; RoadUI.Menu = function (options)
  3. {
  4. var defaults = {
  5. srcElement: null,
  6. id: "",
  7. clickClose: true //是否点击后立即关闭
  8. };
  9. this.opts = $.extend(defaults, options);
  10. this.$srcObj = null;
  11. if (this.opts.id.isNullOrEmpty() && this.opts.srcElement == null)
  12. {
  13. throw "要添加右键菜单的对象或对象ID为空!"; return true;
  14. }
  15. else
  16. {
  17. this.$srcObj = this.opts.srcElement != null ? $(this.opts.srcElement) : $("#" + this.opts.id);
  18. if (this.$srcObj == null || this.$srcObj.size() == 0)
  19. {
  20. throw "要添加右键菜单的对象为空!"; return true;
  21. }
  22. }
  23. if (!this.opts.id)
  24. {
  25. this.opts.id = this.$srcObj.attr("id");
  26. }
  27. var instance = this;
  28. var isHide = true;
  29. var $contextMenuDiv = $('<div id="roadui_contextmenu_' + this.opts.id + '" class="ctxmenu"></div>');
  30. var $contextMenuTable = $('<table cellpadding="0" cellspacing="0" border="0" ></table>');
  31. $contextMenuDiv.append($contextMenuTable);
  32. $contextMenuDiv.bind("mouseout", function () { isHide = true; window.setTimeout(hide, 1); })
  33. .bind("mouseover", function () { isHide = false; });
  34. $("body").append($contextMenuDiv);
  35. $contextMenuDiv.hide();
  36. this.$srcObj.contextmenu(function (e)
  37. {
  38. var $menu = $("#roadui_contextmenu_" + instance.opts.id);
  39. if ($menu == null || $menu.size() == 0)
  40. {
  41. return false;
  42. }
  43. var left = e ? e.clientX : event.clientX;
  44. var top = e ? e.clientY : event.clientY;
  45. var menuwidth = $menu.width();
  46. var bodywidth = $("body").width();
  47. if (left + menuwidth > bodywidth)
  48. {
  49. left = bodywidth - menuwidth - 5;
  50. }
  51. $menu.css({ "top": top, "left": left });
  52. $menu.focus();
  53. $menu.show();
  54. return false;
  55. });
  56. //添加菜单项
  57. this.addItem = function (options)
  58. {
  59. var defaults = {
  60. type: 0,
  61. ico: "",
  62. title: "",
  63. enabled: true, //是否可用
  64. onclick: null //点击事件
  65. };
  66. var opts = $.extend(defaults, options);
  67. if (!opts.title && opts.type == 0)
  68. {
  69. return false;
  70. }
  71. if (opts.type == 0)
  72. {
  73. var $item = $('<tr type="menu"><td class="ctxmenuimg">' + (opts.ico ? '<img align="absmiddle" src="' + opts.ico + '" />' : '') + '</td><td class="' + (opts.enabled ? 'ctxmenutxt' : 'ctxmenutxt_disabled') + '">' + opts.title + '</td></tr>');
  74. if (opts.enabled)
  75. {
  76. $item.bind("click", function ()
  77. {
  78. if (!opts.enabled)
  79. {
  80. return;
  81. }
  82. if ($.isFunction(opts.onclick))
  83. {
  84. opts.onclick();
  85. }
  86. if (instance.opts.clickClose)
  87. {
  88. $contextMenuDiv.hide();
  89. }
  90. });
  91. }
  92. $item.bind("mouseover", function ()
  93. {
  94. isHide = false;
  95. if (opts.enabled)
  96. {
  97. $(this).children("td:first").removeClass("ctxmenuimg").addClass("ctxmenuimg1");
  98. $(this).children("td:last").removeClass("ctxmenutxt").addClass("ctxmenutxt1");
  99. }
  100. })
  101. .bind("mouseout", function ()
  102. {
  103. isHide = true;
  104. if (opts.enabled)
  105. {
  106. $(this).children("td:first").removeClass("ctxmenuimg1").addClass("ctxmenuimg");
  107. $(this).children("td:last").removeClass("ctxmenutxt1").addClass("ctxmenutxt");
  108. }
  109. });
  110. $contextMenuTable.append($item);
  111. $item.data("opts", opts);
  112. }
  113. else
  114. {
  115. var $item = $('<tr><td class="ctxmenuimg_disabled">' + (opts.ico ? '<img align="absmiddle" src="' + opts.ico + '" />' : '') + '</td><td style="padding:0 4px 0 0;height:15px;"><div class="ctxmenu_itemsplit"></div></td></tr>');
  116. $item.bind("mouseover", function () { isHide = false; })
  117. .bind("mouseout", function () { isHide = true; });
  118. $contextMenuTable.append($item);
  119. }
  120. };
  121. //设置菜单项是否可用
  122. this.setDisabled = function (index, disabled)
  123. {
  124. var $tr = $contextMenuTable.children().children("tr[type]:eq(" + index + ")");
  125. if ($tr == null || $tr.size() == 0)
  126. {
  127. return false;
  128. }
  129. if (disabled)
  130. {
  131. var opts = $tr.data("opts");
  132. $tr.unbind("click").bind("click", function ()
  133. {
  134. if (!opts.enabled)
  135. {
  136. return;
  137. }
  138. if ($.isFunction(opts.onclick))
  139. {
  140. opts.onclick();
  141. }
  142. if (instance.opts.clickClose)
  143. {
  144. $contextMenuDiv.hide();
  145. }
  146. })
  147. .bind("mouseover", function ()
  148. {
  149. isHide = false;
  150. $(this).children("td:first").removeClass("ctxmenuimg").addClass("ctxmenuimg1");
  151. $(this).children("td:last").removeClass("ctxmenutxt").addClass("ctxmenutxt1");
  152. })
  153. .bind("mouseout", function ()
  154. {
  155. isHide = true;
  156. $(this).children("td:first").removeClass("ctxmenuimg1").addClass("ctxmenuimg");
  157. $(this).children("td:last").removeClass("ctxmenutxt1").addClass("ctxmenutxt");
  158. });
  159. $tr.children("td:first").removeClass("ctxmenuimg1").addClass("ctxmenuimg");
  160. $tr.children("td:last").removeClass("ctxmenutxt1").addClass("ctxmenutxt");
  161. }
  162. else
  163. {
  164. $tr.unbind("click").unbind("mouseover").unbind("mouseout").bind("mouseover", function () { isHide = false; }).bind("mouseout", function () { isHide = true; });
  165. $tr.children("td:first").removeClass().addClass("ctxmenuimg_disabled");
  166. $tr.children("td:last").removeClass().addClass("ctxmenutxt_disabled");
  167. }
  168. };
  169. var hide = function ()
  170. {
  171. if (isHide)
  172. {
  173. $contextMenuDiv.hide();
  174. }
  175. };
  176. }