JavaScript实现右键菜单(一)

JavaScript实现右键菜单(一) 收藏
效果:


javascript实现右键菜单的方式很多,思路也各有千秋,在介绍代码之前先简单介绍一下我的右键对象思路。

1、 一个右键对象包含多个右键块。

2、 任何一个页面或控件都能且最多只能挂一个右键块。

3、 每个右键块拥有多级右键项。

4、 采用pupop方式。

下面分对象介绍源码:

公共部分:

/**
* <p>标题: BinaryStar右键菜单JS模型</p>
* <p>功能描述: 模拟右键菜单的功能。</p>
* <p>实现方法: 一个右键菜单对象由多个右键菜单块组成。每个需要右键功能的对象直接关联一个菜单块,
* 同时一个菜单块可以配多个对象关联。
* 每个菜单块包含多个菜单项。每个菜单项可能包含多个子菜单项。
* <p>作者: BinaryStar原创B/S框架</p>
* <p>版本: 0.1</p>
* <p>创建日期: 2005-12-21</p>
*/

/**
* <p>标题: BSRightItemArea</p>
* <p>功能描述: 右键菜单块。</p>
* <p>作者: BinaryStar原创B/S框架</p>
* <p>版本: 0.1</p>
* <p>创建日期: 2005-12-21</p>
*/


var bs_rm_div = "BACKGROUND-COLOR: #efefef;BORDER-BOTTOM: #ffffff 1px outset;border-LEFT: #ffffff 1px outset;border-RIGHT: #ffffff 1px outset;border-TOP: #ffffff 1px outset;FILTER: Alpha(Opacity='95');position:absolute;";
var bs_rm_info_td = "FONT-SIZE: 14px;color:#FFFFFF;font-family:@Tahoma,@宋体;width:20px;layout-flow:vertical-ideographic;";
var bs_rm_info = "position:absolute;top:1px;Height:20px;overflow:hidden;cursor:default;";
var bs_rm_over = "BACKGROUND-COLOR: #8989bc;COLOR: #ffffff;CURSOR: default;FONT-SIZE: 12px;word-break:keep-all;white-space:nowrap;";
var bs_rm_out = "BACKGROUND-COLOR: #efefef;COLOR: #000000;FONT-SIZE: 12px;word-break:keep-all;white-space:nowrap;";
var bs_rm_sperator = "BORDER-BOTTOM: #ffffff 1px inset;border-LEFT: #ffffff 1px inset;border-RIGHT: #ffffff 1px inset;border-TOP: #ffffff 1px inset;width: 95%;";
var bs_rm_error = "TEXT-DECORATION: none;CURSOR: default;FONT-SIZE: 12px;FONT-FAMILY: 宋体;background-color:red;color:window;"

BSRightItemArea


function BSRightItemArea(pid, index, text)...{
this.pid = pid||"BSRightMenu_1";//ID
this.index = index;
this.id = this.pid + "_ItemArea_" + this.index;//ID
this.leftText = text||"BS 制作";//左边显示的文字
this.itemList = new Array();//右键菜单集合
this.thisItemIndex = -1;
this.mouseType = 2; //激发的鼠标方式,缺省为右键
this.preShowFun = "";//激发右键块前的附加方法

//添加一个右键根菜项
this.addRootItem = function (text, jsfun, img, disabled)...{
return this.addItem(-1, text, jsfun, img, disabled);
}

//添加一个右键菜项
this.addItem = function (pIndex, text, jsfun, img, disabled)...{
var newItem = new BSRightItem(this.pid, this.index, this.id, pIndex, this.itemList.length, text, jsfun, img, disabled);
if (text.Trim() == "-" || text.Trim() == "" || text.Trim() == "sperator")...{
newItem.isSperator = true;
}
//设置父节点的子项目
if (pIndex >= 0)...{
var pobj = eval(this.pid);
this.itemList[pIndex].childList.length++;
this.itemList[pIndex].childList[this.itemList[pIndex].childList.length-1] = newItem.index;
newItem.level = this.itemList[pIndex].level+1;
pobj.setMaxLevel(newItem.level);
}
this.itemList.length++;
this.itemList[this.itemList.length-1] = newItem;
return newItem;
}

//菜单项块的展现
this.show = function()...{
var htmlStr = "<table border='0' cellspacing='0'>";
htmlStr += "<tr><td valign="top" bgcolor="#000000" οnclick="event.cancelBubble=true;" style=""+bs_rm_info_td+""><nobr><div style=""+bs_rm_info+"" onselectstart="window.event.returnValue=false;">"+this.leftText+"</div></nobr>";
htmlStr += "</td><td style='padding: 1' valign='bottom'>";
htmlStr += "<table width='100%' border='0' cellspacing='0'>";
for (var i=0; i<this.itemList.length; i++)...{
if (this.itemList[i].pIndex < 0)...{
htmlStr += this.itemList[i].show();
}
}
htmlStr += "</table></td></tr></table>";
return htmlStr;
}

//设置选中的菜单项
this.setIndexItem = function (level, thisIndex)...{
var isSelf = false;
var pobj = eval(this.pid);
var thisLevelItem = -1;
var selectObj = pobj.popupList[level].document.getElementById(pobj.id+"_selectItem");
if (selectObj != null)...{
thisLevelItem = selectObj.value;
if (thisIndex == thisLevelItem && thisLevelItem>=0)...{
if (this.itemList[thisIndex].childList.length > 0)...{
this.itemList[thisIndex].childIsShow = true;
}
isSelf = true;
}
else if (thisLevelItem >= 0)...{
var thisDiv = pobj.popupList[level].document.getElementById(this.itemList[thisLevelItem].id+"_tr");
if (thisDiv != null)...{
this.itemList[thisLevelItem].setImgSelect(thisDiv, false);
this.itemList[thisLevelItem].childIsShow = false;
}
}
selectObj.value = thisIndex;
this.thisItemIndex = thisIndex;
}
return isSelf;
}
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mynickel2000/archive/2006/09/12/1214608.aspx
根目录 菜单菜单二 go 修改 删除 function showMenu(id){ menuForm.id.value = id; if("" == id){ } else{ popMenu(itemMenu,100,"111"); } event.returnValue=false; event.cancelBubble=true; return false; } /** *显示弹出菜单 *menuDiv:右键菜单的内容 *width:行显示的宽度 *rowControlString:行控制字符串,0表示不显示,1表示显示,如“101”,则表示第1、3行显示,第2行不显示 */ function popMenu(menuDiv,width,rowControlString){ //创建弹出菜单 var pop=window.createPopup(); //设置弹出菜单的内容 pop.document.body.innerHTML=menuDiv.innerHTML; var rowObjs=pop.document.body.all[0].rows; //获得弹出菜单的行数 var rowCount=rowObjs.length; //循环设置每行的属性 for(var i=0;i<rowObjs.length;i++) { //如果设置该行不显示,则行数减一 var hide=rowControlString.charAt(i)!='1'; if(hide){ rowCount--; } //设置是否显示该行 rowObjs[i].style.display=(hide)?"none":""; //设置鼠标滑入该行时的效果 rowObjs[i].cells[0].onmouseover=function(){ this.style.background="#818181"; this.style.color="white"; } //设置鼠标滑出该行时的效果 rowObjs[i].cells[0].onmouseout=function(){ this.style.background="#cccccc"; this.style.color="black"; } } //屏蔽菜单菜单 pop.document.oncontextmenu=function(){ return false; } //选择右键菜单的一项后,菜单隐藏 pop.document.onclick=function(){ pop.hide(); } //显示菜单 pop.show(event.clientX-1,event.clientY,width,rowCount*25,document.body); return true; } function create(){ alert("create" + menuForm.id.value + "!"); } function update(){ alert("update" + menuForm.id.value + "!"); } function del(){ alert("delete" + menuForm.id.value + "!"); } function clickMenu(){ alert("you click a menu!"); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值