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 相关文章推荐
jquery ajax 同步异步的执行 return值不能取得的解决方案
Jan 08 Javascript
javascript parseInt() 函数的进制转换注意细节
Jan 08 Javascript
把jquery 的dialog和ztree结合实现步骤
Aug 02 Javascript
avascript中的自执行匿名函数应用示例
Sep 15 Javascript
JavaScript操作Cookie详解
Feb 28 Javascript
详解Document.Cookie
Dec 25 Javascript
js实现的二分查找算法实例
Jan 21 Javascript
Vue中定义全局变量与常量的各种方式详解
Aug 23 Javascript
Vue组件库发布到npm详解
Feb 17 Javascript
js中switch语句的学习笔记
Mar 25 Javascript
JS实现前端路由功能示例【原生路由】
May 29 Javascript
Html5生成验证码的示例代码
May 10 Javascript
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
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
深入理解curl类,可用于模拟get,post和curl下载
2013/06/08 PHP
ThinkPHP入口文件设置及相关注意事项分析
2014/12/05 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
javascript一点特殊用法
2008/05/28 Javascript
JavaScript作用域链使用介绍
2013/08/29 Javascript
jquery默认校验规则整理
2014/03/24 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
jQuery选择器源码解读(二):select方法
2015/03/31 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
python读取Android permission文件
2013/11/01 Python
通过数据库向Django模型添加字段的示例
2015/07/21 Python
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
详解python3实现的web端json通信协议
2016/12/29 Python
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
python设计tcp数据包协议类的例子
2019/07/23 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
python下载的库包存放路径
2020/07/27 Python
python实现简单遗传算法
2020/09/18 Python
AmazeUI 网格的实现示例
2020/08/13 HTML / CSS
打印机墨盒:123Inkjets
2017/02/16 全球购物
日语求职信范文
2013/12/17 职场文书
产品促销活动策划书
2014/01/15 职场文书
合唱兴趣小组活动总结
2014/07/10 职场文书
晋江市人民政府党组群众路线教育实践活动整改方案
2014/10/25 职场文书
个性发展自我评价2015
2015/03/09 职场文书
2015年度公共机构节能工作总结
2015/05/26 职场文书
勤俭节约主题班会
2015/08/13 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis