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 Konami Code 实现代码
Jul 29 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
Nov 15 Javascript
Jquery对象和Dom对象的区别分析
Nov 20 Javascript
使用JavaScript获取地址栏参数的方法
Dec 19 Javascript
JS实现获取剪贴板内容的方法
Jun 21 Javascript
Wireshark基本介绍和学习TCP三次握手
Aug 15 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
Dec 15 Javascript
原生js实现商品放大镜效果
Jan 12 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
Feb 08 Javascript
小程序实现抽奖动画
Apr 16 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
Feb 06 Javascript
解决vue-photo-preview 异步图片放大失效的问题
Jul 29 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
服务器web工具 php环境下
2010/12/29 PHP
PHP编写RESTful接口
2016/02/23 PHP
php+MySQL实现登录时验证登录名和密码是否正确
2016/05/10 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
2017/07/04 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
根据分辨率不同,调用不同的css文件
2006/07/07 Javascript
用js遍历 table的脚本
2008/07/23 Javascript
js报错 Object doesn't support this property or method的原因分析
2011/03/31 Javascript
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
jquery实现div阴影效果示例代码
2013/09/16 Javascript
JavaScript学习笔记之DOM基础 2.4
2015/08/14 Javascript
JavaScript中Window对象的属性及事件
2015/12/25 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
vue实现的下拉框功能示例
2019/01/29 Javascript
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
Python利用递归实现文件的复制方法
2018/10/27 Python
用python脚本24小时刷浏览器的访问量方法
2018/12/07 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
详解Python_shutil模块
2019/03/15 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
html5 css3网站菜单实现代码
2013/12/23 HTML / CSS
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
英国鹦鹉店:Parrot Essentials
2018/12/03 全球购物
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
新闻专业个人求职信
2013/12/19 职场文书
幼儿园家长会欢迎词
2014/01/09 职场文书
中级会计职业生涯规划范文
2014/01/16 职场文书
欢迎领导标语
2014/06/27 职场文书
挂职学习心得体会
2014/09/09 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
2015年度内部审计工作总结
2015/05/20 职场文书
MySQL系列之七 MySQL存储引擎
2021/07/02 MySQL