js如何实现右键菜单
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js如何实现右键菜单相关的知识,希望对你有一定的参考价值。
思路:
你需要先组织默认的右键事件,
你需要自己制作一个右键图层,
下面是简单的代码:
<style>* margin:0; padding:0; list-style:none;
#ul1 li width:400px; background:#CCC; border:1px solid black; margin:10px; float:left; line-height:30px; text-indent:1em;
#menu width:150px; border:1px solid black; border:1px solid black; position:absolute; left:0; top:0; display:none; background:white;
#menu li padding:3px;
#menu li:hover background:#CCC;
</style>
<script>
window.onload=function ()
var aLi=document.getElementById(\'ul1\').children;
var oMenu=document.getElementById(\'menu\');
var aMenuLi=oMenu.children;
for (var i=0; i<aLi.length; i++)
aLi[i].oncontextmenu=function (ev)
var oEvent=ev || event;
oMenu.style.display=\'block\';
oMenu.style.left=oEvent.clientX+\'px\';
oMenu.style.top=oEvent.clientY+\'px\';
var _this=this;
aMenuLi[0].onclick=function ()
_this.parentNode.removeChild(_this);
;
return false;
;
document.onclick=function ()
oMenu.style.display=\'none\';
;
;
</script>
</head>
<body>
<ul id="menu">
<li>删除</li>
<li>变成红色</li>
<li>变成绿色</li>
<li>变成黄色</li>
<li>变成蓝色</li>
</ul>
<ul id="ul1">
<li>中国信保原副总戴春宁贪污、受贿、通奸被开除党籍</li>
<li>中纪委原书记贺国强考察贵阳孔学堂(图)</li>
<li>解放军报官微:胡锡进相关微博内容是胡说八道</li>
<li>刘汉向湖北省高院提出上诉 已提交上诉状</li>
<li>澳洲公布疑似马航坠毁噪音 或解MH370失踪之谜</li>
<li>曝京沪高铁上海段地面开裂10cm 回应称不影响运营</li>
<li>朝鲜宣传一农场已建成“社会主义世外桃源”(图)</li>
</ul>
</body> 参考技术A 监听鼠标右击事件,弹出一个浮动的div本回答被提问者采纳 参考技术B 文档名称
TRMS V100R001D01软件概要设计说明书
页数
共116页
文档编号
001
版本号
V100R001D01
发布日期
2013-04-18
密级
秘密
TRMS V100R001D01软件设计说明书
编制人
赵苗苗
日期
2013-04-18
审核人
日期
批准人
日期
Preface序言
Keywords关键词:
TRMS设计 输入 输出
Abstract摘要:
编写本报告的目的是明确本系统的概要设计,供使用单位确认系统的功能和性能,并作为软件设计人员的设计依据和使用单位的验收标准。
List of abbreviations缩略语清单:
Abbreviations缩略语
Full spelling英文全名
Chinese explanation中文解释
TRMS
Traing Record Manage System
档案培训管理系统
SectionPage
第1章简介...1-13
1.1目的...1-13
1.2背景...1-13
1.3参考资料...1-13
第2章总体设计...2-13
2.1总体设计方案...2-13
2.2与外部系统的连接关系...2-14
2.3需求规定...2-14
2.4运行环境...2-14
2.4.1设备...2-14
2.4.2支持软件...2-14
2.4.3接口...2-15
2.4.4控制...2-15
2.5基本设计概念和处理流程...2-15
2.6结构...2-17
2.7功能需求与系统模块的关系...2-19
2.8人工处理过程...2-21
2.9尚未解决的问题...2-22
第3章接口设计...3-22
3.1用户接口...3-22
3.2外部接口...3-24
3.3内部接口...3-24
第4章运行设计...4-24
4.1运行模块组合...4-24
4.2运行控制...4-24
第5章程序设计说明...5-24
5.1管理员登录设计说明...5-24
5.1.1程序描述...5-25
5.1.2输入项...5-25
5.1.3输出项...5-25
5.1.4流程逻辑...5-26
5.1.5错误处理...5-26
5.2添加学员设计说明...5-26
5.2.1程序描述...5-26
5.2.2输入项...5-27
5.2.3输出项...5-28
5.2.4流程逻辑...5-28
5.3查询学员设计说明...5-28
5.3.1程序描述...5-28
5.3.2输入项...5-29
5.3.3输出项...5-29
5.3.4流程逻辑...5-30
5.4修改学员设计说明...5-30
5.4.1程序描述...5-30
5.4.2输入项...5-31
5.4.3输出项...5-31
5.4.4流程逻辑...5-32
5.5删除学员设计说明...5-32
5.5.1程序描述...5-32
5.5.2输入项...5-33
5.5.3流程逻辑...5-33
5.6查看指定时间缺席的学员设计说明...5-34
5.6.1程序描述...5-34
5.6.2输入项...5-34
5.6.3输出项...5-35
5.6.4流程逻辑...5-35
5.7查看参加课程的学员设计说明...5-35
5.7.1程序描述...5-36
5.7.2输入项...5-36
5.7.3输出项...5-36
5.7.4流程逻辑...5-37
5.8查看学员的各科成绩设计说明...5-37
5.8.1程序描述...5-37
5.8.2输入项...5-37
5.8.3输出项...5-38
5.8.4流程逻辑...5-38
5.9查看培训学员排名设计说明...5-39
5.9.1程序描述...5-39
5.9.2输入项...5-39
5.9.3输出项...5-40
5.9.4流程逻辑...5-40
5.10添加讲师设计说明...5-40
5.10.1程序描述...5-41
5.10.2输入项...5-41
5.10.3输出项...5-41
5.10.4流程逻辑...5-42
5.11查询讲师设计说明...5-43
5.11.1程序描述...5-43
5.11.2输入项...5-43
5.11.3输出项...5-44
5.11.4流程逻辑...5-44
5.12修改讲师设计说明...5-44
5.12.1程序描述...5-44
5.12.2输入项...5-45
5.12.3输出项...5-45
5.12.4流程逻辑...5-46
5.13删除讲师设计说明...5-46
5.13.1程序描述...5-46
5.13.2输入项...5-47
5.13.3流程逻辑...5-47
5.14查看学员对讲师的评价设计说明...5-48
5.14.1程序描述...5-48
5.14.2输入项...5-49
5.14.3输出项...5-49
5.14.4流程逻辑...5-50
5.15查看讲师评分设计说明...5-50
5.15.1程序描述...5-50
5.15.2输入项...5-51
5.15.3输出项...5-51
5.15.4流程逻辑...5-52
5.16查询讲师培训排名设计说明...5-52
5.16.1程序描述...5-52
5.16.2输出项...5-53
5.16.3流程逻辑...5-53
5.17查询课程设计说明...5-54
5.17.1程序描述...5-54
5.17.2输入项...5-54
5.17.3输出项...5-55
5.17.4流程逻辑...5-55
5.18添加课程设计说明...5-56
5.18.1程序描述...5-56
5.18.2输入项...5-56
5.18.3输出项...5-57
5.18.4流程逻辑...5-58
5.19修改课程设计说明...5-58
5.19.1程序描述...5-58
5.19.2输入项...5-59
5.19.3输出项...5-59
5.19.4流程逻辑...5-60
5.20删除课程设计说明...5-61
5.20.1程序描述...5-61
5.20.2输入项...5-62
5.20.3输出项...5-62
5.20.4流程逻辑...5-62
5.21查看课程评价设计说明...5-63
5.21.1程序描述...5-63
5.21.2输入项...5-63
5.21.3输出项...5-64
5.21.4流程逻辑...5-64
5.22查看课程评分设计说明...5-65
5.22.1输入项...5-65
5.22.2输出项...5-65
5.22.3流程逻辑...5-66
5.23查询指定年份开设的课程设计说明...5-66
5.23.1程序描述...5-66
5.23.2输入项...5-67
5.23.3输出项...5-67
5.23.4流程逻辑...5-67
5.24查询培训课程排名设计说明...5-68
5.24.1程序描述...5-68
5.24.2输出项...5-68
5.24.3流程逻辑...5-69
5.25添加培训计划设计说明...5-69
5.25.1输入项...5-69
5.25.2输出项...5-69
5.25.3流程逻辑...5-70
5.26查询培训计划设计说明...5-70
5.26.1输入项...5-70
5.26.2输出项...5-71
5.26.3流程逻辑...5-71
5.27修改培训计划设计说明...5-71
5.27.1程序描述...5-72
5.27.2输入项...5-72
5.27.3输出项...5-72
5.27.4流程逻辑...5-72
5.28删除培训计划设计说明...5-73
5.28.1输入项...5-73
5.28.2流程逻辑...5-74
5.29添加班级设计说明...5-74
5.29.1程序描述...5-74
5.29.2输入项...5-75
5.29.3输出项...5-75
5.29.4流程逻辑...5-75
5.30查询班级设计说明...5-76
5.30.1程序描述...5-76
5.30.2输入项...5-76
5.30.3输出项...5-77
5.30.4流程逻辑...5-77
5.31修改班级设计说明...5-77
5.31.1程序描述...5-78
如使用原生js自定义右键菜单
1、右键菜单触发的基本过程
实现自定义右键菜单我们首先需要了解以下内容:
浏览器默认的右键菜单触发的基本过程
- 单击右键,菜单出现
- 菜单出现,鼠标箭头一直在菜单左上角
- 再换个位置点击右键,原菜单消失,新菜单出现在指定位置
- 点击左键,中键,菜单消失
以上为大致实现过程,不全面,仅供参考
也许文字过于抽象,我们来看看代码吧:
2、HTML结构
<!--start右键菜单的结构-->
<div id="rightmenu" class="rightmenu">
<ul>
<li disabled="disabled">
<a href="#">返回(B)</a>
<span>Alt+向左箭头</span></li>
<li><a href="#">前进(F)</a> <span>Alt+向右箭头</span></li>
<li><a href="#">重新加载(R)</a> <span>Ctrl+R</span></li>
</ul>
<ul>
<li><a href="#">另存为(A)...</a> <span>Ctrl+S</span></li>
<li><a href="#">打印(P)..</a> <span>Ctrl+P</span></li>
<li><a href="#">投射(C)...</a> <span>Ctrl+R</span></li>
</ul>
<ul>
<li><a href="#">查看你个锤代码(V)</a> <span>Ctrl+U</span></li>
<li><a href="#">检查你个瓜皮(N)</a> <span>Ctrl+Shift+L</span></li>
</ul>
</div>
<!--end右键菜单的结构-->
<div class="box"></div>
3、CSS样式
*
margin: 0;
padding: 0;
li
list-style: none;
.rightmenu
width: 250px;
background: #fff;
border: 1px solid #bababa;
position: fixed;
box-sizing: border-box;
display: none;
.rightmenu ul
border-bottom: 1px solid #e9e9e9;
.rightmenu ul li
height: 30px;
line-height: 30px;
color: #000;
padding: 0 25px;
box-sizing: border-box;
margin: 2px 0;
cursor: default;
.rightmenu ul li:hover
background: #ebebeb;
.rightmenu ul li a
font-size: 12px;
color: #000;
cursor: default;
text-decoration: none;
.rightmenu ul li span
float: right;
font-size: 12px;
color: #000;
.box
width: 100px;
height: 100px;
background: red;
.rightmenu设置display:none是因为右键菜单本身是隐藏了因为点击了才出现,倘若不加这句,菜单会出现在页面的左上角。
3、js实现过程
分析:
①:浏览器本身就有右键菜单,我们也要做右键菜单,所以应当阻止浏览器的右键,这里可以用到preventDefault(),这个方法有着阻止默认事件的功能,科普一下,什么是默认事件:
例如: 点我可以知道这是可以跳转到百度的,所以是有个跳转时间的,这个事件我们没有去用js实现,他是默认的,所以称之为默认事件,同理,浏览器右键菜单。
②前面我们说了菜单出现,鼠标箭头一直在菜单左上角,这是怎么实现的呢,这涉及到event里面的事件发生坐标了,我们点击的位置就是我们右键点击事件发生的位置,可以用坐标来解释这个位置,clientX(事件发生点和可视区域的位置),offsetX(事件发生点和父级元素的位置),pageX(事件发生点和页面的位置),screenX(事件发生点和屏幕的位置),这里我们用offsetX/Y,因为我们是在BOW中点击,所以具体原因大家百度一下就直道了,我们还是看代码吧,代码里标注的很详细。
<script>
document.addEventListener('DOMContentLoaded',function()
//获取
var rightMenu=document.getElementById('rightmenu');
//1.首先将右键默认行为关闭
window.oncontextmenu=function(event)
event.preventDefault();
//2.设置右键行为
rightMenu.style.display="none";//重置已经block的菜单
rightMenu.style.display="block";
rightMenu.style.left=event.offsetX+'px';
rightMenu.style.top=event.offsetY+'px';
//3.根据真实浏览器的右键来看左键是可以取消右键菜单的
document.onclick=function(event)
rightMenu.style.display="none";
//4.功能并不完善,需要给每个li写BOM事件,这里暂时不写了
//5.仔细检查你会发现当右键在自己定义的右键菜单上时,会出现一点小情况,可以自己测试
)
</script>
以上仅供参考,更多的功能实现都是差不多的原理,好了,结束了。
以上是关于js如何实现右键菜单的主要内容,如果未能解决你的问题,请参考以下文章