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 相关文章推荐
javascript instanceof 内部机制探析
Oct 15 Javascript
基于Jquery的淡入淡出的特效基础练习
Dec 13 Javascript
Javascript事件热键兼容ie|firefox
Dec 30 Javascript
在IE浏览器中resize事件执行多次的解决方法
Jul 12 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
Aug 20 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
Feb 16 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
Feb 21 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
Jul 12 Javascript
js使用generator函数同步执行ajax任务
Sep 05 Javascript
给vue项目添加ESLint的详细步骤
Sep 29 Javascript
layer.alert自定义关闭回调事件的方法
Sep 27 Javascript
vue cli3适配所有端方案的实现
Apr 13 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
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
WordPress中给媒体文件添加分类和标签的PHP功能实现
2015/12/31 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
JavaScript 学习笔记(十五)
2010/01/28 Javascript
JS判断是否为数字,是否为整数,是否为浮点数的代码
2010/04/24 Javascript
CSS+jQuery实现的一个放大缩小动画效果
2013/09/24 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
2016/05/03 Javascript
从零学习node.js之搭建http服务器(二)
2017/02/21 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
Vue实现导出excel表格功能
2018/03/30 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
Element Dropdown下拉菜单的使用方法
2020/07/26 Javascript
简单的连接MySQL与Python的Bottle框架的方法
2015/04/30 Python
Python中的sort()方法使用基础教程
2017/01/08 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
django 前端页面如何实现显示前N条数据
2020/03/16 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
python进度条显示之tqmd模块
2020/08/22 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
python音频处理的示例详解
2020/12/23 Python
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
文员岗位职责范本
2014/03/08 职场文书
家长对孩子的感言
2014/03/10 职场文书
表彰大会主持词
2014/03/26 职场文书
车队司机个人自我鉴定
2014/04/17 职场文书
会计毕业生自荐书
2014/06/12 职场文书
2014年重阳节活动策划方案书
2014/09/16 职场文书
2014年信用社工作总结
2014/11/25 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python
使用feign服务调用添加Header参数
2021/06/23 Java/Android
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS