自定义右键菜单

自定义右键菜单
实现原理
     为body添加一个div,当点击右键的时候,显示div。

1、创建一个RightMenu函数
属性有设置背景backgroundColor、设置上边框borderTop、设置右边框borderRight、设置下边框borderBottom、设置左边框borderLeft,并为属性指定默认值。
方法有添加项AddItem、添加线AddLine、初始化Init。

2、AddItem和AddLine方法介绍
首先,创建一个数组this.MenuContent = [];
将添加项和添加线保存在这个数组中。
AddItem方法
name指名称 fn指点击时出发的函数  img 指图片
this.AddItem = function (name,fn,img){
   this.MenuContent[this.MenuContent.length] = [name , fn , img];
}
AddLine方法
this.AddLine = function (){
   this.MenuContent[this.MenuContent.length] = "line";
}

3、初始化
创建一个div,并将这个div添加到body中。根据this.MenuContent中的每一项,判断是添加项还是线。最后将div的位置设置为鼠标右键点击的位置。

4、最后,设置一个全局状态属性rightMenuStatus,判断是创建了RightMenu函数(或叫类)的对象。


<!DOCTYPE html> <html> <head> <title>自定义右键菜单---www.cnblogs.com/kuikui</title> <style type="text/css"> td, body{font-size: 12px;} </style> <script type="text/javascript"> function RightMenu() { if (window.rightMenuStatus) return; window.rightMenuStatus = true; this.backgroundColor = "#d4d0c8"; this.borderTop = "1px solid #fff"; this.borderLeft = "1px solid #fff"; this.borderBottom = "1px solid #969696"; this.borderRight = "1px solid #969696"; this.MenuContent = []; this.AddItem = function (name, fn, img) { this.MenuContent[this.MenuContent.length] = [name, fn, img]; } this.AddLine = function () { this.MenuContent[this.MenuContent.length] = "line"; } this.Init = function () { var div = document.createElement("div"); with (div.style) { position = "absolute"; left = top = "0px"; width = "150px"; lineHeight = "20px"; backgroundColor = this.backgroundColor; borderTop = this.borderTop; borderLeft = this.borderLeft; borderBottom = this.borderBottom; borderRight = this.borderRight; cursor = "default"; zIndex = 2000; } document.body.appendChild(div); var s = ""; for (var i = 0; i < this.MenuContent.length; i++) { if (this.MenuContent[i] == "line") { s += "<div style=\"height:0px;line-height:0px;overflow:hidden;border-top:1px solid #888;border-bottom:1px solid #fff;\"></div>"; } else { if (this.MenuContent[i][2]) { s += "<div style=\"width:100%;\" onclick=\"" + this.MenuContent[i][1] + "\" onmouseover=\"style.background=\'#0a246a\';style.color=\'#fff\';\" onmouseout=\"style.background=\'\';style.color=\'\';\">&nbsp;<img alt=\"\" src=\"" + this.MenuContent[i][2] + "\" />" + this.MenuContent[i][0] + "</div>"; } s += "<div style=\"width:100%;\" onclick=\"" + this.MenuContent[i][1] + "\" onmouseover=\"style.background=\'#0a246a\';style.color=\'#fff\';\" onmouseout=\"style.background=\'\';style.color=\'\';\">&nbsp;" + this.MenuContent[i][0] + "</div>"; } div.innerHTML = s; div.oW = div.offsetWidth; div.oH = div.offsetHeight; div.style.display = "none"; document.oncontextmenu = function (event) { event = event || window.event; var nx = document.body.scrollLeft + event.clientX; var ny = document.body.scrollTop + event.clientY; if (event.clientX + div.oW + 20 > document.body.offsetWidth) { nx = nx - div.oW; } if (event.clientY + div.oH + 20 > document.body.offsetHeight) { ny = ny - div.oH; } div.style.left = nx; div.style.top = ny; div.style.display = "block"; this.onclick = function () { setTimeout(function () { div.style.display = "none"; }, 100); this.onclick = null; } return false; } } } } </script> </head> <body> <script type="text/javascript"> var rm = new RightMenu(); rm.AddItem("项目1", "alert(1)"); rm.AddItem("项目2", "alert(2)", "http://images.cnblogs.com/cnblogs_com/kuikui/354173/t_aa.jpg"); rm.AddItem("项目3", "alert(3)"); rm.AddItem("项目4", "alert(4)"); rm.AddLine(); rm.AddItem("项目5", "alert(5)", "http://images.cnblogs.com/cnblogs_com/kuikui/354173/t_aa.jpg"); rm.AddItem("项目6", "alert(6)"); rm.AddItem("项目7", "alert(7)"); rm.Init(); </script> </body> </html>

运行代码

转载于:https://www.cnblogs.com/kuikui/archive/2012/02/13/2349529.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值