JavaScript实现右键菜单(四)

以上介绍了右键菜单的实现思路和原代码。下面说明应用举例。

<html>
<head>
<style>
/*BS右键菜单*/
.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;
  z-index:999;
}
.bs_rm_info_td
{
  FONT-SIZE: 14px;
  color:#FFFFFF;
  font-family:@Tahoma,@宋体;
  width:20px;
  layout-flow:vertical-ideographic;
}
.bs_rm_info{
  position:absolute;
  top:1px;
  height:20px;
  overflow:hidden;
}

.bs_rm_over {
  BACKGROUND-COLOR: #8989bc;
  COLOR: #ffffff;
  CURSOR: default;
  FONT-SIZE: 12px;
}
.bs_rm_out {
  BACKGROUND-COLOR: #efefef;
  COLOR: #000000;
  FONT-SIZE: 12px;
}
.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%;
}
</style>
<SCRIPT language=javascript src="bsrightmenu.js"></SCRIPT>
<script type='text/javascript'>
/*---去空格---*/
String.prototype.Trim = function()
{
return this.replace(/(^/s*)|(/s*$)/g, "");
}

String.prototype.LTrim = function()
{
return this.replace(/(^/s*)/g, "");
}

String.prototype.RTrim = function()
{
return this.replace(/(/s*$)/g, "");
}

var TestFrame_rmMenu = new BSRightMenu("TestFrame_rmMenu");
var rmTestArea = TestFrame_rmMenu.addItemArea("自定义右键菜单");
/*参数:1、父菜单索引(添加的顺序,0开始)
* 2、显示文字。
* 3、执行的js方法。
* 4、图片:建议16*16
* 5、disabled。true:不可用,false:可用;
*/
rmTestArea.addItem(-1, "菜单一", "alert('菜单一')", "", true);
rmTestArea.addItem(-1, "菜单二", "", "save.gif");
rmTestArea.addItem(1, "菜单二_1", "alert('菜单二_1')", "");
rmTestArea.addItem(1, "-", "", "");
rmTestArea.addItem(1, "菜单二_2", "alert('菜单二_2')", "");
rmTestArea.addItem(2, "改变菜单一的可用", "setItemDisabled(0)", "");
rmTestArea.addItem(2, "菜单二_1_2", "alert('菜单二_1_2')", "");
rmTestArea.addItem(4, "菜单二_2_1", "alert('菜单二_2_1')", "");
rmTestArea.addItem(4, "-", "", "");
rmTestArea.addItem(4, "菜单二_2_2", "alert('菜单二_2_2')", "");

function setItemDisabled(inindex){
 TestFrame_rmMenu.itemAreaList[0].itemList[inindex].disabled=!TestFrame_rmMenu.itemAreaList[0].itemList[inindex].disabled;
}
function doRight(){
 TestFrame_rmMenu.doRightMenu(0);
}
</script>
</head>
<body>
<div οnmοuseup="doRight()" style="cursor:default;">右键测试Div</div>
<input id="" type="button" value="右键测试Button" οnmοuseup="doRight()"/>
<script type='text/javascript'>
document.onmouseup = function(){TestFrame_rmMenu.doRightMenu(-1);};
</script>
</body>

</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根目录 菜单菜单二 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!"); }
实现菜单重命名功能,你可以使用el-tree组件的contextmenu事件和自定义菜单实现。 首先,在el-tree组件上添加contextmenu事件监听器,可以使用@contextmenu指令或v-contextmenu指令。例如: ```html <el-tree @contextmenu="showContextMenu"> <!-- 树节点内容 --> </el-tree> ``` 接下来,在你的Vue实例中定义showContextMenu方法来处理菜单的显示和点击事件。在该方法中,你可以使用event对象的clientX和clientY属性来获取鼠标点击的位置,然后显示自定义的菜单。例如: ```javascript methods: { showContextMenu(event) { event.preventDefault(); // 阻止默认菜单弹出 const menu = document.getElementById('custom-menu'); // 获取自定义菜单元素 menu.style.left = event.clientX + 'px'; // 设置菜单的水平位置 menu.style.top = event.clientY + 'px'; // 设置菜单的垂直位置 menu.style.display = 'block'; // 显示菜单 // 其他逻辑... } } ``` 注意,上述代码中获取自定义菜单元素的方式使用了getElementById,所以需要在页面中定义一个id为custom-menu的元素作为自定义菜单的容器,并设置其样式为隐藏。例如: ```html <div id="custom-menu" style="display: none;"> <!-- 自定义菜单内容 --> </div> ``` 最后,你还需要在自定义菜单的内容中添加一个重命名选项,并为其添加点击事件监听器。在点击事件处理函数中,你可以通过获取当前选中的树节点,进行相应的重命名操作。例如: ```html <div id="custom-menu" style="display: none;"> <div @click="renameNode">重命名</div> </div> ``` ```javascript methods: { renameNode() { // 获取当前选中的树节点 const selectedNode = this.$refs.tree.getCurrentNode(); // 执行重命名逻辑... } } ``` 这样,当用户点击el-tree的节点时,会触发showContextMenu方法显示自定义菜单,点击重命名选项会执行renameNode方法进行重命名操作。你可以根据具体的业务需求,在renameNode方法中实现对节点的重命名逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值