Javascript实现的简单右键菜单类


Posted in Javascript onSeptember 23, 2015

本文实例讲述了Javascript实现的简单右键菜单类。分享给大家供大家参考。具体如下:

这是自己写的一个右键菜单类,屏蔽掉了IE固有的右键菜单,一共有四个参数:第一个是出发显示右键菜单的div的id

第二个是右键菜单这个层的id,根据这个id去创建一个新的层,menuList是菜单项的列表,对应了点击一个菜单项后触发的函数,classList是菜单的class名称,以及菜单项对应的class名称,包含了鼠标滑过时的class。

运行效果截图如下:

Javascript实现的简单右键菜单类

在线演示地址如下:

具体代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>右键菜单</title>
<style type="text/css">
.cmenu
{
 position:absolute;
 top:100px;
 left:100px;
 width:200px;
 height:200px;
 background-color:white;
 border:1px solid pink;
}
.liAble
{
 font-family:"宋体";
 color:#6699CC;
 margin-left:10px;
 margin-top:5px;
 list-style-type:none;
 cursor:default;
}
.liMouseOver
{
 margin-left:10px;
 margin-top:5px;
 background-color:#CCFFFF;
 list-style-type:none;
 cursor:default;
}
</style>
</head>
<body>
<div style="margin-left:auto; margin-right:auto; height:300px; width:60%;background-color:#CC6699" id="x">
</div>
<input type="hidden" id="value1" value="4" />
<input type="hidden" id="value2" value="5" />
<script type="text/javascript">
//右键菜单类
function RightHandMenu(div,menuDiv,menuList,classList)
{
 var oThis = this;
 this._menuList = 
 {
 }
 this._classList = 
 {
  objClass:'',
  MenuClass:'',
  liAbleClass:'',
  liMouseOverClass:''
 }
 this.Init = function()
 {
  this._obj = $(div);
  this._obj.oncontextmenu = function(e){oThis.ShowMenu(e)};
  this._obj.className = this._classList.objClass;
  document.onclick = function(){oThis.HiddenMenu()};
  objToObj(this._classList, classList);
  objToObj(this._menuList, menuList);
 }
 this.CreateMenu = function()
 {
  if($(menuDiv))
  {
   alert("该ID已被占用");
   return;
  }
  this._menu = document.createElement("DIV");
  this._menu.id = menuDiv;
  this._menu.oncontextmenu = function(e){stopBubble(e)};
  this._menu.className = this._classList.MenuClass;
  this._menu.style.display = "none";
  document.body.appendChild(this._menu);
 }
 this.CreateMenuList = function()
 {
  for(var pro in this._menuList)
  {
   var li = document.createElement("LI");
   li.innerHTML = pro;
   this._menu.appendChild(li);
   li.className = this._classList.liAbleClass;
   li.onclick = this._menuList[pro];
   li.onmouseover = function(){oThis.ChangeLiClass(this,oThis._classList.liMouseOverClass)}
   li.onmouseout = function(){oThis.ChangeLiClass(this,oThis._classList.liAbleClass)}
  }
 }
 this.ChangeLiClass = function(obj,name)
 {
  obj.className = name
 }
 this.ShowMenu = function(e)
 {
  var e = e || window.event;
  stopBubble(e);
  var offsetX = e.clientX;
  var offsetY = e.clientY;
  with(this._menu.style)
  {
   display = "block";
   top = offsetY + "px";
   left = offsetX + "px";
  }
 }
 this.HiddenMenu = function()
 {
  this._menu.style.display = "none";
 }
 this.Init();
 this.CreateMenu();
 this.CreateMenuList();
}
function stopBubble(oEvent)
{
 if(oEvent.stopPropagation) oEvent.stopPropagation();
 else oEvent.cancelBubble = true;
  if(oEvent.preventDefault) oEvent.preventDefault();
 else oEvent.returnValue = false;
}
function $(div)
{
 return 'string' == typeof div ? document.getElementById(div) : div;
}
function objToObj(destination,source)
{
 for(var pro in source)
 {
  destination[pro] = source[pro];
 }
 return destination;
}
//构造右键菜单
function Edit()
{
 alert("edit");
}
function Delete()
{
 alert("delete");
}
var menuList = 
{
 编辑:Edit,
 删除:Delete
}
var classList = 
{
 MenuClass:'cmenu',
 liAbleClass:'liAble',
 liMouseOverClass:'liMouseOver'
}
var x = new RightHandMenu("x","testDiv",menuList,classList)
</script>
</body>
</html>

希望本文所述对大家的JavaScript程序设计有所帮助。

Javascript 相关文章推荐
E3 tree 1.6在Firefox下显示问题的修复方法
Jan 30 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
Nov 30 Javascript
jquery实现的图片点击滚动效果
Apr 29 Javascript
通过$(this)使用jQuery包装后的方法或属性
May 18 Javascript
jquery插件开发之选项卡制作详解
Aug 30 jQuery
vue.js学习笔记之v-bind和v-on解析
May 03 Javascript
vue动态绑定组件子父组件多表单验证功能的实现代码
May 14 Javascript
vue后台管理之动态加载路由的方法
Aug 13 Javascript
如何在微信小程序里面退出小程序的方法
Apr 28 Javascript
VueCli3.0中集成MockApi的方法示例
Jul 05 Javascript
微信小程序实现列表的横向滑动方式
Jul 15 Javascript
vue使用element-ui实现表单验证
Dec 13 Vue.js
js实现无限级树形导航列表效果代码
Sep 23 #Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
Sep 23 #Javascript
JS实现3D图片旋转展示效果代码
Sep 22 #Javascript
JS+CSS实现带小三角指引的滑动门效果
Sep 22 #Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
Sep 22 #Javascript
JavaScript脚本判断蜘蛛来源的方法
Sep 22 #Javascript
jQuery实现的经典滑动门效果
Sep 22 #Javascript
You might like
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
php Session无效分析资料整理
2016/11/29 PHP
使用prototype.js进行异步操作
2007/02/07 Javascript
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
jQuery插件uploadify实现ajax效果的图片上传
2016/06/18 Javascript
Backbone View 之间通信的三种方式
2016/08/09 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
Angular 输入框实现自定义验证功能
2017/02/19 Javascript
页面间固定参数,通过cookie传值的实现方法
2017/05/31 Javascript
Puppeteer 爬取动态生成的网页实战
2018/11/14 Javascript
浅谈Angular单元测试总结
2019/03/22 Javascript
js实现简单的秒表
2020/01/16 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
Python numpy生成矩阵、串联矩阵代码分享
2017/12/04 Python
浅谈Python中range和xrange的区别
2017/12/20 Python
python的socket编程入门
2018/01/29 Python
Python语言的变量认识及操作方法
2018/02/11 Python
python日期时间转为字符串或者格式化输出的实例
2018/05/29 Python
Python3安装psycopy2以及遇到问题解决方法
2019/07/03 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
澳大利亚优质的家居用品和生活方式公司:Bed Bath N’ Table
2019/04/16 全球购物
大学生未来职业生涯规划书
2014/02/15 职场文书
金融管理毕业生求职信
2014/03/03 职场文书
小学班长竞选演讲稿
2014/04/24 职场文书
晋江市人民政府党组群众路线教育实践活动整改方案
2014/10/25 职场文书
房产分割协议书范文
2014/11/21 职场文书
三好学生竞选稿
2015/11/21 职场文书
CSS3 天气图标动画效果
2021/04/06 HTML / CSS
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
2021/05/17 Python
Java实现斗地主之洗牌发牌
2021/06/14 Java/Android