`

区域右键方案

阅读更多
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
<title>sdf</title> 
<style type="text/css"> 
html,body{margin:0px;padding:0px;width:100%;height:100%;font-size:12px;overflow:show;} 
#cmenu{border:1px solid #5EB4D8;background-color:#F6F9FD;padding:2px;} 
ul,li{list-style:none;margin:0px;padding:0px;} 
.item{list-style:none;margin:0px;padding:0px;height:23px;line-height:23px;display:block;padding:0px;padding-left:10px;} 
.itemOver{background-color:#68B5EA;color:#fff;cursor:default;} 
.separator{width:100%;height:1px;line-height:1px;overflow:hidden;font-size:1px;background-color:#ACA899;margin:1px 0px 1px 0px;padding:0px;} 

.contextDiv{position:absolute;border:1px solid #cccccc;width:150px;height:100px;background-color:#EFECDD;} 
</style> 
</head> 
<body> 
<div id="div1" class="contextDiv" style="left:300px;top:80px;">右键 Div1</div> 
<div id="div2" class="contextDiv" style="left:300px;bottom:0px;">右键 Div2</div> 
<div id="div3" class="contextDiv" style="float:right;right:0px;top:100px;">右键 Div3</div> 
<div id="div4" class="contextDiv" style="float:right;right:0px;bottom:0px;">右键 Div4</div> 
<select style="position:absolute;top:200px;left:300px;"> 
<option>1111111111111111111111111111111</option> 
</select> 
<div id="cmenu" style="position:absolute;display:none;top:0px;left:0px;width:100px;z-index:10000;"> 
<ul> 
<li id="open">打开</li> 
<li id="edit">编辑</li> 
<li id="del" class="disabled">删除</li> 
<li class="separator"></li> 
<li id="rename">重命名</li> 
<li class="separator"></li> 
<li id="prop">属性</li> 
</ul> 
</div> 
</body> 
</html>

<script type="text/javascript"> 
<!-- 
// 获取对象 
function $o(id){return document.getElementById(id); } 
// 获取目标元素 
function getElement(evt){ evt = evt ||window.event; return (evt.srcElement || evt.target);} 
// 鼠标X坐标 
function positionX(evt){evt = evt || window.event; return (evt.x || evt.clientX || evt.pageX);} 
// 鼠标Y坐标 
function positionY(evt){evt = evt || window.event; return (evt.y || evt.clientY || evt.pageY);} 
// 清除事件冒泡和传递影响 
function clearEventBubble(evt){ 
evt = evt || evt.event; 
if(evt.stopPropagation) evt.stopPropagation(); else evt.cancelBubble = true; 
if(evt.preventDefault) evt.preventDefault(); else evt.returnValue = false; 
} 
// 事件绑定 
function addEvent(actionEvents,eventObj){ 
eventObj = eventObj || document; 
if(window.attachEvent){ 
for(var actionType in actionEvents){ 
eventObj.attachEvent("on"+actionType,actionEvents[actionType]); 
} 
} 
if(window.addEventListener){ 
for(var actionType in actionEvents){ 
eventObj.addEventListener(actionType,actionEvents[actionType],false); 
} 
} 
} 

document.oncontextmenu = function(){return false; } 

// 右键菜单 
function contextMenu(initProps,bindingEvents){ 
this._contextMenu = null; // 右键菜单体 
this._contextMenuId = initProps["contextMenuId"]; // 待加载右键菜单的对象 
this._targetElement = initProps["targetElement"]; // 右键菜单目标 
this._funcEvents = bindingEvents.bindings; // 绑定的事件配置信息 
this._menuItems = null; // 菜单项 
// 浏览器类型判断 
this._isIE = function(){return navigator.userAgent.toLowerCase().indexOf("msie")!=-1 && document.all}; 
} 

// 初始化右键菜单功能 
contextMenu.prototype.buildContextMenu = function(){ 

// 获取菜单对象 
this._contextMenu = $o(this._contextMenuId); 
this._contextMenu.style.top ="-1000px"; 
this._contextMenu.style.left="-1000px"; 
this._contextMenu.style.display = "none"; 

// 初始化样式菜单项 
this._menuItems = this._contextMenu.getElementsByTagName("ul")[0].getElementsByTagName("li"); 
for(var i in this._menuItems){ 
if(this._menuItems[i].className != "separator"){ 
this._menuItems[i].className = "item"; 
this._menuItems[i].onmouseover = function(){this.className ="item itemOver";}; 
this._menuItems[i].onmouseout = function(){this.className = "item";} 
} 
} 

var _self = this; 

addEvent({ 
"contextmenu":function(){ 
var evt = window.event||arguments[0]; 
clearEventBubble(evt); 
_self.showContextMenu(evt); 
evt = null; 
}, 
"click":function(){ 
_self.hideContextMenu(); 
} 
},document); 

} 

contextMenu.prototype.addFunc = function(funcId,funcEle){ 
this._funcEvents[funcId](funcEle); 
} 

// 显示右键菜单 
contextMenu.prototype.showContextMenu = function(evt){ 
try{ 
var _cmenuObj = this._contextMenu; 
var _focusEle = getElement(evt); 
var _items = this._menuItems; 
var _self = this; 
if(_focusEle.className == this._targetElement){ 
// 绑定菜单项点击事件 
for(var j in _items){ 
if(_items[j].className != "separator"){ 
_items[j].onclick = function(){_self.addFunc(this.id,_focusEle); _self.hideContextMenu(); }; 
} 
} 

_cmenuObj.style.display = "block"; 

var _px = positionX(evt); 
var _py = positionY(evt); 
var _bodyWidth = parseInt(document.body.offsetWidth ||document.body.clientWidth); 
var _bodyHeight = parseInt(document.body.offsetHeight || document.body.clientHeight); 
var _mWidth = parseInt( _cmenuObj.offsetWidth || _cmenuObj.style.width); 
var _mHeight = parseInt(_cmenuObj.offsetHeight); 

_cmenuObj.style.left = ((_px + _mWidth) > _bodyWidth?(_px - _mWidth):_px) +"px"; 
_cmenuObj.style.top = ((_py + _mHeight) > _bodyHeight?(_py - _mHeight):_py) +"px"; 

// ie 下创建背景遮盖层 
if(this._isIE){ 
_self.createIframeBg({ 
"left" : _cmenuObj.style.left, 
"top" : _cmenuObj.style.top, 
"width" : _mWidth +"px", 
"height" : _mHeight+"px", 
"z-index": (parseInt(_cmenuObj.style.zIndex)-1) 
}); 
} 

_px = null,_py = null,_bodyWidth = null,_bodyHeight = null,_mWidth = null,_mHeight = null; 
}else{ 
this.hideContextMenu(); 
} 

}catch(e){ 
}finally{ 
_items = null; 
_srcEle = null; 
_cmenuObj = null; 
} 
} 
// 隐藏右键菜单 
contextMenu.prototype.hideContextMenu = function(){ 
// 移除在 ie 下创建 iframe背景层 
if(this._isIE && $o("maskIframe")){ 
document.body.removeChild($o("maskIframe")); 
} 
// 隐藏菜单 
if(this._contextMenu && this._contextMenu.style.display != "none"){ 
this._contextMenu.style.display = "none"; 
} 
} 
// ie 下为右键菜单添加 iframe背景层,用来遮住 select 
contextMenu.prototype.createIframeBg = function(styleProp){ 
var maskStyle = "position:absolute;left:"+styleProp["left"]+";top:"+styleProp["top"]+";width:"+styleProp["width"]+";height:"+styleProp["height"]+";z-index:"+styleProp["z-index"]; 

if($o("maskIframe")){ 
$o("maskIframe").style.cssText = maskStyle; 
}else{ 
var _maskIframeBg = document.createElement("<iframe id=\"maskIframe\" src=\"\" frameborder='0' border='0' scrolling=\"no\"></iframe>"); 
document.body.appendChild(_maskIframeBg); 
_maskIframeBg.style.cssText = maskStyle; 
_maskIframeBg = null; 
} 
maskStyle = null; 
} 

//--> 
</script> 

<script type="text/javascript"> 
var cmenu = new contextMenu( 
{ 
contextMenuId : "cmenu", 
targetElement : "contextDiv" 
}, 
{ 
bindings:{ 
'open' : function(o){alert("打开 "+o.id);}, 
'edit' : function(o){alert("编辑 "+o.id);}, 
'del' : function(o){alert("删除 "+o.id);}, 
'rename': function(o){alert("重命名 "+o.id);}, 
'prop' : function(){alert("查看属性");} 
} 
} 
); 
cmenu.buildContextMenu(); 
</script> 
分享到:
评论

相关推荐

    右键添加新建记事本

    1. 右键点击任意空白区域。 2. 在弹出的菜单中查找“新建”选项,检查是否出现了“文本文档”选项。 3. 如果一切正常,现在您可以轻松地创建新的记事本文件了。 ### 注意事项 - 修改注册表存在风险,操作前请确保...

    右键新建菜单修改工具--鼠牛Ⅱ

    总的来说,鼠牛Ⅱ是一款实用且易于上手的右键菜单修改工具,对于希望个性化电脑操作体验的用户来说,它提供了一个方便快捷的解决方案。通过简单的步骤,用户可以自由定制属于自己的右键新建菜单,让日常操作更加...

    DhtmlxTree-dhtmlxmenu实现在节点上右键弹出菜单

    4、考虑到dhtmlxmenu实在指定的区域构建菜单,所以可以为dhtmlXTree树上的每一个节点添加右键事件,在这个右键事件里获得该节点对象所对应的区域,然后在这个区域内构建Menu菜单。 难点和解决方案: 1、怎样获得...

    jQuery右键点击指定区域下拉菜单代码.zip

    本资源"jQuery右键点击指定区域下拉菜单代码.zip"提供了一个实用的jQuery解决方案,它可以帮助开发者快速创建右键点击后出现的下拉菜单,适用于各种定制化的网页需求。 首先,让我们了解一下jQuery的基本概念。...

    右键管理无法关联解决补丁

    在Windows系统中,右键菜单是用户界面的一个重要组成部分,它允许用户通过鼠标右键点击文件、文件夹或桌面空白区域,快速访问各种操作选项。当右键菜单的某些功能无法正常工作时,可能是由于注册表中的相关键值损坏...

    禁止右键代码示例demo

    - 禁止除表单元素(如输入框、文本区域等)之外的所有元素的文字选择。 - 通过监听`onmousedown`和`onmouseup`事件来控制文本选择行为。 #### 三、总结与思考 虽然禁止右键点击可以在一定程度上保护网站内容或优化...

    alt加鼠标右键模拟滚轮按压

    2. 接着,用鼠标右键点击你要滚动的区域,不要松开鼠标右键。 3. 此时,你可以通过上下移动鼠标来模拟滚轮的滚动,上移鼠标相当于向上滚动,下移鼠标则相当于向下滚动。 4. 滚动到所需位置后,松开"Alt"键和鼠标右键...

    很酷的右键弹出菜单

    这个"很酷的右键弹出菜单"可能是开发者或设计师为了提供更丰富的用户体验而设计的一种创新解决方案。让我们深入探讨一下这个话题,以及与之相关的知识点。 首先,我们来了解什么是右键弹出菜单。在大多数操作系统和...

    一个右键菜单,支持不同对象不同菜单,兼容IE、Firefox

    标题中的“一个右键...总的来说,这个项目展示了Web开发中的一个常见需求和解决方案,即创建自定义的右键菜单,同时考虑到了浏览器兼容性问题,这对于任何希望提升网站交互性的开发者来说都是一个有价值的实践案例。

    C#程序托盘化,可右键

    "C#程序托盘化,可右键"这个主题涉及到的是如何将一个C#应用程序最小化到系统托盘区域,并且实现右键菜单功能。下面将详细阐述这一技术要点。 首先,系统托盘是Windows操作系统中任务栏旁边的一个区域,通常用于放置...

    控制台系统托盘 包括右键菜单

    在这个名为“ConsoleTray”的项目中,我们可以看到`ConsoleTray.sln`文件,这是一个Visual Studio解决方案文件,包含了项目的所有配置和依赖。打开这个文件,我们可以看到项目的源代码,了解如何使用C++或者C#来实现...

    vs2010右键菜单去掉自动折叠修复包

    VS2010右键菜单去掉自动折叠修复包,其目的是通过修改或更新Visual Studio的设置或组件,以防止在使用右键菜单后代码区域自动收缩。这个修复包可能是由微软官方发布的,也可能是由社区开发者提供的解决方案。KB...

    DotNetBar的tabControl标签页实现右键菜单

    通过本篇内容,您将了解到实现这一功能的具体步骤、涉及到的关键技术点以及可能遇到的问题及其解决方案。 ### 一、DotNetBar简介 DotNetBar是一个用于Windows Forms的高级UI控件套件,它提供了许多强大的控件来...

    完整版屏蔽编辑框右键.e.rar

    标题“完整版屏蔽编辑框右键.e.rar”暗示了一个专注于阻止用户通过编辑框的右键菜单进行操作的解决方案。这个压缩包文件包含了一个名为“屏蔽编辑框右键.e”的文件,很可能是一个软件程序、脚本或代码示例,用于演示...

    JavaScript基于Proto.Menu实现鼠标点击网页右键菜单

    - 编辑器:在文本区域右键点击,可以插入特殊字符、格式化文本等。 总之,Proto.Menu为前端开发者提供了一种高效且易于定制的解决方案,通过与Prototype框架的结合,使得创建具有丰富功能的右键菜单变得轻而易举。...

    win10桌面右键反应慢怎么办.docx

    标题中的问题“win10桌面右键反应慢怎么办”涉及到Windows 10操作系统的一个常见问题,即用户在桌面空白区域点击鼠标右键时,出现菜单响应速度变慢或延迟的现象。这种现象可能由多种原因引起,包括系统设置、注册表...

    win10右键空白处反应慢怎么办.docx

    标题和描述中提到的问题是关于Windows 10操作系统的一个常见问题,即用户在桌面上右键点击空白区域时,系统响应速度慢,反应延迟。这个问题可能是由于注册表中某些设置不正确或者第三方软件的右键菜单扩展导致的。...

    icon(托盘图标+图标右键弹出菜单+图标冒泡)

    综上所述,这个解决方案提供了全面的托盘图标管理,包括图标展示、右键菜单交互以及图标冒泡提醒,是一个典型的后台运行程序的用户界面设计。在PowerBuilder环境下,开发者通过集成这些元素,可以构建出用户友好且...

    利用JS重写Cognos右键菜单的实现代码

    总结来说,我们看到的是如何利用JavaScript来控制浏览器默认的右键菜单行为,并提供了一个使用自定义菜单的替代方案。这在需要改变默认操作或提供额外功能时非常有用。需要注意的是,虽然修改默认浏览器行为可能提升...

    Keil5_VScode配色方案

    首先,VScode的配色方案,也称为主题,是改变代码编辑区域的颜色布局,使得代码更易读、更美观。这些配色方案通常以JSON格式存储,包含不同语言关键字、变量、注释等元素的色彩定义。为了将VScode的主题应用于Keil5...

Global site tag (gtag.js) - Google Analytics