今天来讲一个关于右键菜单的小demo,抛砖引玉。

首先,我们要用css和html做一个自定义右键菜单。

<!--自定义右键菜单html代码-->
<div id="menu">
<div class="menu">功能1</div>
<div class="menu">功能2</div>
<div class="menu">功能3</div>
<div class="menu">功能4</div>
<div class="menu">功能5</div>
</div>

/*css代码*/
#menu{width: 0; /*设置为0 隐藏自定义菜单*/
height: 125px;
overflow: hidden; /*隐藏溢出的元素*/
box-shadow: 0 1px 1px #888,1px 0 1px #ccc;
position: absolute; /*自定义菜单相对与body元素进行定位*/
}
.menu{width: 130px;
height: 25px;
line-height: 25px;
padding: 0 10px;
}

现在我们已经有了自定义菜单,还需要一个很重要的事件 contextmenu。
> contextmenu :当你在页面上右键点击时,会触发此事件,并会跳出浏览器自带的右键菜单。

所以,我们要做的就是,在触发contextmenu事件时,取消掉默认行为(也就是阻止浏览器显示自带的菜单)
通过传入的事件对象,来确定鼠标的点击位置,作为left和top的值来进行元素的定位,并显示自定义菜单

window.οncοntextmenu=function(e){
//取消默认的浏览器自带右键 很重要!!
e.preventDefault();//获取我们自定义的右键菜单
var menu=document.querySelector("#menu");//根据事件对象中鼠标点击的位置,进行定位
menu.style.left=e.clientX+'px';
menu.style.top=e.clientY+'px';//改变自定义菜单的宽,让它显示出来
menu.style.width='125px';
}
//关闭右键菜单,很简单
window.οnclick=function(e){//用户触发click事件就可以关闭了,因为绑定在window上,按事件冒泡处理,不会影响菜单的功能document.querySelector('#menu').style.height=0;
}

这里只是一个很简单的例子,contextmenu事件支持所有 HTML 元素,这意味者你可以给不同的元素,自定义不同的右键菜单,由于contextmenu事件会冒泡传播,子节点上触发的事件,在父节点上也会触发,所以应该调用对应的函数或者设置对应的属性值来阻止事件冒泡。
根据事件对象来定位其实很复杂也很简单,除了clientY和clientX,鼠标事件对象提供了一系列复杂的相关信息,诸如layerX,pageX等等,这些值并不直观,还存在浏览器兼容问题,不过clientX和clientY,可以说是万金油属性。

转载于:https://www.cnblogs.com/splitgroup/p/6921069.html

JS简单实现自定义右键菜单相关推荐

  1. 桌面 html 自定义,【极简壁纸 - 技术分享】html js自定义右键菜单方法

    自定义右键菜单 极简壁纸2.0 地址: https://bz.zzzmh.cn 目前进度已开发到95% 近期有时间就会分享一下,我在开发过程中用到的一些小技术的简单用法和demo 关于html js右 ...

  2. Chrome开发自定义右键菜单实现快速跳转到指定页面

    一.背景 假设我们在日常的测试过程中,有很多页面需要经常访问,一种方式是我们可以直接把这些页面添加为书签,但这种方式必须记录完整的URL.如果我们有多套环境,比如有测试环境.UAT环境.线上环境,每套 ...

  3. [读码时间] 自定义右键菜单

    说明:代码取自网络,CSS中注释为笔者学习时添加,JS中的注释为原文所有! <!DOCTYPE html> <html> <head><meta charse ...

  4. linux右键菜单颜色,Linux_自定义右键菜单代码详解, style !-- /*定义菜单 - phpStudy...

    自定义右键菜单代码详解 < style > < !-- /*定义菜单方框的样式1*/ .skin0 { position:absolute; text-align:left; wid ...

  5. antd Tree组件中,自定义右键菜单

    最近项目中,有一个需求是自定义antd的Tree组件的右键菜单功能. 直接上代码 class Demo extends Component {state = {rightClickNodeTreeIt ...

  6. DevExpress的TreeList实现自定义右键菜单打开文件选择对话框

    场景 DevExpress的TreeList实现节点上添加自定义右键菜单并实现删除节点功能: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det ...

  7. java 树 右键菜单_jQuery实现自定义右键菜单的树状菜单效果

    本文实例讲述了jQuery实现自定义右键菜单的树状菜单效果.分享给大家供大家参考.具体如下: 这是一款基于jQuery的自定义右键菜单,在树状结构的子节点(下级没有节点)上单击右键才会弹出自定义菜单, ...

  8. vue怎么实现右键二级菜单_vue中如何自定义右键菜单详解

    在所编辑的页面,需要添加右键菜单的元素,绑定contextmenu事件,如下: v-for="item in resourceList" :key="item.id&qu ...

  9. win10 自定义右键菜单

    win10 自定义右键菜单 首先使用快捷键 win + r 打开运行窗口,在其中输入 regedit 然后点击 确定 进入注册表后,按照顺序找到位置: HKEY_LOCAL_MACHINE\SOFTW ...

最新文章

  1. Module not found: Can‘t resolve ‘@babel/runtime/helpers/esm/extends‘ in ‘C:\Users\wdg\Desktop\Ant-De
  2. 《Engineering》评选2021年全球十大工程成就 | 中国工程院院刊
  3. 角点检测——发现图像的特征
  4. SQL Server在存储过程中编写事务处理代码的三种方法
  5. Sightseeing Cows POJ - 3621
  6. MySQL 高级 —— MVCC 多版本并发控制
  7. [Java] 蓝桥杯ALGO-42 算法训练 送分啦
  8. CentOS下ELK收集Nginx日志
  9. Go语言:运行代码报错main redeclared in this block previous declaration at .\test.go:5:6
  10. 怎么做分布式存储的面试?
  11. 工程图字体宋体仿宋_电纸书kindle字体推荐——耐看、悦目、经典
  12. 萤石云谷歌禁用flash_mac chrome屏蔽flash插件怎么办 mac chrome flash启用方法
  13. 产品结构图 = 产品功能结构图 + 产品信息结构图
  14. tail关键字查询日志
  15. 朱晔的互联网架构实践心得S2E4:小议微服务的各种玩法(古典、SOA、传统、K8S、ServiceMesh)...
  16. 淘宝上大量贩卖微信号,这些人买这么多微信号目的是
  17. 计算机房灭火房间用的系数,消防安全知识试题(三)(2)
  18. BZOJ 4605: 崂山白花蛇草水 树套树 权值线段树套kdtree
  19. 昂达v80 plus linux,昂达(ONDA)V80 Plus平板电脑整体性能评测-ZOL中关村在线
  20. STM32中文参考手册_V10

热门文章

  1. js校验复选框(多选按钮)是否被选中的方法
  2. 点击改变div高度_css实现div两列布局(两种方法)
  3. 2019-3:时间飞逝
  4. pytorch实现BiLSTM+CRF用于NER(命名实体识别)
  5. Springboot前后端分离上传、下载压缩包、查看文件
  6. LeetCode简单题之将每个元素替换为右侧最大元素
  7. LLVM 编译器和工具链技术
  8. TensorRT 基于Yolov3的开发
  9. 嵌入式Linux设备驱动程序:编写内核设备驱动程序
  10. Android中Handler消息机制