js实现上下文菜单

上下文菜单在web开发中也叫作右键菜单,在web开发中比较常见。如果后台系统用的前端插件,比如easyui等,本身就附带了这种上下文控件,但是如果想要自己实现,该如何做呢?这里我分享一个给各位朋友,先看下最终的整体效果:

这里面有两个要解决的问题:
如何准确的获取鼠标右键点击的位置,并让原本隐藏的菜单在该位置显示出来。
当页面高度很高,以至于在页面最右边出现滚动条的时候也要确保弹出菜单的位置是正确的。
如何解决?
我们来看,如果想要获取鼠标的点击位置,我们可以通过事件的pageX或者clientX,但是这两个用哪一个呢?因为pageX是指文档窗口最左边到鼠标点击位置的距离(pageY同理,是文档窗口最上边到鼠标点击位置的距离),而clientX是可视窗口最左边到鼠标点击位置的距离(clientY同理,是可视窗口最上边到鼠标点击位置的距离)。也就是说pageX的值是包含滚动条滚出的距离的,所以在这里要想确保弹出菜单的位置是正确的,我们要用pageX和pageY。
    2.还有一点要注意,比如我上面的弹出菜单是一个ul,ul本身padding和margin是不为0的,这样子的话,即便你使用了pageX和pageY,上下 文菜单弹出的时候还是和你鼠标点击的位置有一个padding或者margin的偏差,所以还要在ul中设置margin和padding为0。
下面是具体的代码实现部分,为了达到让页面有滚动条的效果,我复制了很多行table的tr标签,所以显得html很长。
html代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>上下文菜单</title>
</head>
<body> 
  <ul class="menu" id="menu">
          <li>删除</li>
        <li class="sep"></li>
        <li>修改</li>
        <li class="sep"></li>
        <li>查看详细信息</li>
  </ul>
  <table class="datatable">
      <tr>
        <th>日期</th>
        <th>时间</th>
        <th>银行名称</th>
        <th>账号</th>
        <th>出入账名称</th>
        <th>金额</th>
        <th>对方国别</th>
        <th>交易性质名称</th>
      </tr>
         <tr>
          <td>2016-6-1</td>
          <td>09:30:08</td>
          <td>上海浦东发展银行上海分行</td>
          <td>FTN9884554100002014</td>
          <td>入账</td>
          <td>2,199,975.00</td>
          <td>香港</td>
          <td>一般贸易</td>
         </tr>
             <tr>
          <td >2016-6-1</td>
          <td>09:30:08</td>
          <td>上海浦东发展银行上海分行</td>
          <td>FTN9884554100002001</td>
          <td>出账</td>
          <td>14,447,235.82</td>
          <td>中国</td>
          <td>货物</td>
         </tr>
         <tr>
          <td >2016-6-1</td>
          <td>09:28:43</td>
          <td>上海浦东发展银行上海分行</td>
          <td>FTE9799539000001601</td>
          <td>出账</td>
          <td>1,528,818.94</td>
          <td>中国</td>
          <td>因金融衍生工具交易引起的收入/因金融衍生工具交易引起的支出</td>
         </tr>
         <tr>
          <td >2016-6-1</td>
          <td>09:28:43</td>
          <td>上海浦东发展银行上海分行</td>
          <td>FTE9804545000000114</td>
          <td>出账</td>
          <td>9,770.00</td>
          <td>香港</td>
          <td>一般贸易</td>
         </tr>
         <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr>
          <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr>
          <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr>
          <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr>
          <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr>
          <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr> <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr>
          <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr> <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr> <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr> <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr>
          <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr> <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr>
          <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr>
          <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr>
          <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr>
          <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr>
          <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr>
          <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr>
          <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr>
          <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr> <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr>
          <tr>
          <td >2016-6-1</td>
          <td>08:41:22</td>
          <td>上海电气财务公司(上海)</td>
          <td>FTE3105016536000000000501</td>
          <td>入账</td>
          <td>6,200,000.00</td>
          <td>中国</td>
          <td>财务公司集团内部上存/下划</td>
         </tr>
    </table>     
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值