基于jQuery的鼠标右键菜单

喜欢ヅ旅行 2021-09-15 12:02 537阅读 0赞

对于自制的鼠标右键功能,我们应该考虑哪些因素呢?

一、涉及因素

1、阻止默认鼠标右键事件。

3、右键事件,使菜单出现。

2、考虑右键菜单出现的位置,是否超出窗口。

4、点击窗口任意位置,菜单消失。

二、具体代码及分析如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>基于jQuery鼠标右键菜单</title>
  6. <style type="text/css">
  7. * {
  8. margin: 0;
  9. padding: 0;
  10. font-family: "微软雅黑";
  11. box-sizing: border-box;
  12. list-style: none;
  13. }
  14. h2 {
  15. margin: 100px auto;
  16. width: 500px;
  17. padding: 20px;
  18. font-size: 30px;
  19. letter-spacing: 10px;
  20. color: #FFFFFF;
  21. text-align: center;
  22. border-top: 3px solid #d56f22;
  23. border-bottom: 3px solid #d56f22;
  24. border-radius: 10px;
  25. }
  26. .contextmenu {
  27. display: none;
  28. position: absolute;
  29. width: 200px;
  30. background: #FFFFFF;
  31. border-radius: 5px;
  32. overflow: hidden;
  33. z-index: 99;
  34. }
  35. .contextmenu li {
  36. border-left: 3px solid transparent;
  37. transition: ease 0.3s;
  38. }
  39. .contextmenu li:hover {
  40. background: #CE93D8;
  41. border-left: 3px solid #9C27B0;
  42. }
  43. .contextmenu li a {
  44. display: block;
  45. padding: 10px;
  46. color: #000000;
  47. text-decoration: none;
  48. transition: ease 0.3s;
  49. }
  50. .contextmenu li:hover a {
  51. color: #FF0000;
  52. }
  53. </style>
  54. </head>
  55. <body style="background: #2C3E50;">
  56. <h2>提示:鼠标右键点击</h1>
  57. <ul class="contextmenu">
  58. <li>
  59. <a href="">百度</a>
  60. </li>
  61. <li>
  62. <a href="#">搜狐</a>
  63. </li>
  64. <li>
  65. <a href="#">搜狗</a>
  66. </li>
  67. <li>
  68. <a href="#">必应</a>
  69. </li>
  70. <li>
  71. <a href="#">网易</a>
  72. </li>
  73. </ul>
  74. </body>
  75. </html>
  76. <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
  77. <script type="text/javascript">
  78. // 文档加载后激活函数
  79. $(document).ready(function() {
  80. // 鼠标右键事件
  81. $(document).contextmenu(function(e) {
  82. // 获取窗口尺寸
  83. var winWidth = $(document).width();
  84. var winHeight = $(document).height();
  85. // 鼠标点击位置坐标
  86. var mouseX = e.pageX;
  87. var mouseY = e.pageY;
  88. // ul标签的宽高
  89. var menuWidth = $(".contextmenu").width();
  90. var menuHeight = $(".contextmenu").height();
  91. // 最小边缘margin(具体窗口边缘最小的距离)
  92. var minEdgeMargin = 10;
  93. // 以下判断用于检测ul标签出现的地方是否超出窗口范围
  94. // 第一种情况:右下角超出窗口
  95. if(mouseX + menuWidth + minEdgeMargin >= winWidth &&
  96. mouseY + menuHeight + minEdgeMargin >= winHeight) {
  97. menuLeft = mouseX - menuWidth - minEdgeMargin + "px";
  98. menuTop = mouseY - menuHeight - minEdgeMargin + "px";
  99. }
  100. // 第二种情况:右边超出窗口
  101. else if(mouseX + menuWidth + minEdgeMargin >= winWidth) {
  102. menuLeft = mouseX - menuWidth - minEdgeMargin + "px";
  103. menuTop = mouseY + minEdgeMargin + "px";
  104. }
  105. // 第三种情况:下边超出窗口
  106. else if(mouseY + menuHeight + minEdgeMargin >= winHeight) {
  107. menuLeft = mouseX + minEdgeMargin + "px";
  108. menuTop = mouseY - menuHeight - minEdgeMargin + "px";
  109. }
  110. // 其他情况:未超出窗口
  111. else {
  112. menuLeft = mouseX + minEdgeMargin + "px";
  113. menuTop = mouseY + minEdgeMargin + "px";
  114. };
  115. // ul菜单出现
  116. $(".contextmenu").css({
  117. "left": menuLeft,
  118. "top": menuTop
  119. }).show();
  120. // 阻止浏览器默认的右键菜单事件
  121. return false;
  122. });
  123. // 点击之后,右键菜单隐藏
  124. $(document).click(function() {
  125. $(".contextmenu").hide();
  126. });
  127. });
  128. </script>

三、效果图

20180527193853744

发表评论

表情:
评论列表 (有 0 条评论,537人围观)

还没有评论,来说两句吧...

相关阅读

    相关 QT鼠标弹出菜单

    在用QT编程时,有时候要实现鼠标右键弹出菜单的功能.下面代码演示鼠标右键弹出菜单. 1.新建一个QT工程,点击MainWindow.ui,鼠标右键Go to slot....