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从纯真网(cz88.net)获取IP地址对应地区名
Dec 02 Javascript
通过JS获取用户本地图片路径并显示的代码
Feb 16 Javascript
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
Aug 24 Javascript
JQuery加载图片自适应固定大小的DIV
Sep 12 Javascript
判断一个变量是数组Array类型的方法
Sep 16 Javascript
使用Node.js实现HTTP 206内容分片的教程
Jun 23 Javascript
浅谈Javascript中的Label语句
Dec 14 Javascript
Angular简单验证功能示例
Dec 22 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
Nov 29 Javascript
史上最为详细的javascript继承(推荐)
May 18 Javascript
微信小程序如何调用json数据接口并解析
Jun 29 Javascript
详解nginx配置vue h5 history去除#号
Nov 09 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 获取select下拉列表框的值
2010/05/08 PHP
PHP中的session永不过期的解决思路及实现方法分享
2011/04/20 PHP
php过滤表单提交的html等危险代码
2014/11/03 PHP
Zend Framework连接Mysql数据库实例分析
2016/03/19 PHP
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
Dom加载让图片加载完再执行的脚本代码
2008/05/15 Javascript
JavaScript URL参数读取改进版
2009/01/16 Javascript
基于jQuery的树控件实现代码(asp.net+json)
2010/07/11 Javascript
js函数在frame中的相互调用详解
2014/03/03 Javascript
JavaScript学习笔记整理之引用类型
2016/01/22 Javascript
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
利用JavaScript实现栈的数据结构示例代码
2017/08/02 Javascript
JavaScript中附件预览功能实现详解(推荐)
2017/08/15 Javascript
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
[00:23]DOTA2群星共贺开放测试 25日无码时代来袭
2013/09/23 DOTA
[00:42]《辉夜杯》—职业组预选赛12月3日15点 正式打响
2015/12/03 DOTA
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
2014/06/18 Python
python的socket编程入门
2018/01/29 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
简单了解Python多态与属性运行原理
2020/06/15 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
应届护士求职信范文
2014/01/26 职场文书
一年级评语大全
2014/04/23 职场文书
护理专业毕业生自荐信
2014/06/15 职场文书
学生实习证明范文
2014/09/28 职场文书
总经理助理岗位职责
2015/01/31 职场文书
工作能力自我评价2015
2015/03/05 职场文书
搞笑的婚礼主持词
2015/06/29 职场文书
Python机器学习之PCA降维算法详解
2021/05/19 Python
Win11更新失败并提示0xc1900101
2022/04/19 数码科技