`
chengyue2007
  • 浏览: 1481894 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

javascript右键菜单(所有浏览器)

阅读更多

<HTML>  
<HEAD>  
<TITLE> New Document </TITLE>  
<SCRIPT LANGUAGE="JavaScript">   
<!--  
window.Menu=function(isDir,text,handle)  
{  
    this.IsDirectory=false;    //是否是目录      
    this.HTMLObj=null;    //关联HTML对象  
    this.ParentMenu=null;    //父菜单  
    this.SubMenus=[];    //存储子菜单数组  
    this.Text="";  
    this.ZIndex=900;    //层  
    this.Handle=null;    //单击时所执行的语句,目录不支持此属性  
    if(typeof(isDir)!="undefined" && isDir)  
    {  
        this.IsDirectory=true;  
    }  
    if(typeof(text)!="undefined")  
    {  
        this.Text=text;  
    }  
    if(typeof(handle)!="undefined")  
    {  
        this.Handle=handle;  
    }  
    //创建并追加子菜单  
    this.CreateSubMenu=function(isDir,text,handle)  
    {  
        if(this.IsDirectory)  
        {  
            var oMenu=new Menu();  
            if(typeof(isDir)!="undefined")  
            {  
                oMenu.IsDirectory=isDir;  
            }  
            if(typeof(text)!="undefined")  
            {  
                oMenu.Text=text;  
            }  
            if(typeof(handle)!="undefined")  
            {  
                oMenu.Handle=handle;  
            }  
            this.AppendSubMenu(oMenu);  
            return oMenu;  
        }  
        alert("出现错误,该对象不支持CreateSubMenu方法");  
        return null;  
    }  
    //追加子菜单  
    this.AppendSubMenu=function(oMenu)  
    {  
        this.SubMenus.push(oMenu);  
        oMenu.ParentMenu=this;  
        oMenu.ZIndex=this.ZIndex+1;  
    }  
    //插入子菜单  
    this.InsertSubMenu=function(oMenu,iAlign)  
    {  
        if(iAlign>=this.SubMenus.length)  
        {  
            this.SubMenus.push(oMenu);  
        }  
        else 
        {  
            this.SubMenus.splice(iAlign,0,oMenu);  
        }  
        oMenu.ParentMenu=this;  
        oMenu.ZIndex=this.ZIndex+1;  
    }  
    //移除子菜单  
    this.RemoveSubMenu=function(iAlign)  
    {  
        var RemoveArr=this.SubMenus.splice(iAlign,1);  
        if(RemoveArr.length>0)  
        {  
            RemoveArr[0].HTMLObj.parentNode.removeChild(RemoveArr[0].HTMLObj);  
        }  
    }  
    //把子菜单的数据转换成HTML格式  
    this.Create=function()  
    {  
        if(!this.IsDirectory)  
        {  
            alert("出现错误,该对象不支持Create方法");  
            return false;  
        }  
        var ParentElement=document.createElement("div");  
        this.ChildMenuHTMLObj=ParentElement;    //关联子菜单的HTML对象容器  
        ParentElement.style.cursor="default";  
        ParentElement.onmousedown=function()  
        {  
            window.event.cancelBubble=true;  
        }  
        ParentElement.onselectstart=function()  
        {  
            return false;  
        }  
        ParentElement.style.position="absolute";  
        ParentElement.style.width="0px";  
        ParentElement.style.visibility="hidden";  
        ParentElement.style.zIndex=this.ZIndex;  
        ParentElement.style.border="1px solid #464646";      
        var table=document.createElement("table");  
        table.border=0;  
        table.cellPadding=0;  
        table.cellSpacing=0;  
        var tbody=document.createElement("tbody");  
        table.appendChild(tbody);  
        var tr=document.createElement("tr");  
        var ltd=document.createElement("td");  
        var rtd=document.createElement("td");  
        tr.appendChild(ltd);  
        tr.appendChild(rtd);  
        tbody.appendChild(tr);  
        ltd.style.width="25px";  
        ltd.style.backgroundImage="url(http://www.fjcjhr.com/bg.gif)";  
        ParentElement.appendChild(table);  
        var len=this.SubMenus.length;  
        if(len>0)  
        {  
            var ChildTable=document.createElement("table");  
            var ChildTBody=document.createElement("tbody");  
            ChildTable.appendChild(ChildTBody);  
            ChildTable.border=0;  
            ChildTable.cellPadding=0;  
            ChildTable.cellSpacing=0;  
            ChildTable.style.fontSize=Menu.Config.FontSize;  
            ChildTable.style.color=Menu.Config.FontColor;  
            rtd.appendChild(ChildTable);  
        }  
        for(var i=0;i<len;i++)  
        {  
            var tempTr=document.createElement("tr");  
            //关联HTML对象和DATA对象  
            this.SubMenus[i].HTMLObj=tempTr;    //关联子菜单的HTML对象  
            tempTr.DataObj=this.SubMenus[i];  
            var tempTd=document.createElement("td");  
            tempTr.style.backgroundColor=Menu.Config.BgColor;  
            tempTr.appendChild(tempTd);  
            tempTd.style.height=Menu.Config.PerMenuHeight;  
            tempTd.vAlign="middle";              
            tempTd.style.wordWarp="normal";  
            tempTd.style.paddingLeft="5px";  
            tempTd.style.paddingRight="5px";  
            tempTr.onmouseover=this.SubMenus[i].MouseOver;  
            tempTr.onmouseout=this.SubMenus[i].MouseOut;  
            tempTr.onclick=this.SubMenus[i].Click;  
            tempTd.appendChild(document.createTextNode(this.SubMenus[i].Text));  
            var DirectoryTd=document.createElement("td");  
            if(this.SubMenus[i].IsDirectory)  
            {  
                var font=document.createElement("font");  
                font.style.fontFamily="webdings";  
                font.appendChild(document.createTextNode("4"));  
                DirectoryTd.appendChild(font);  
            }  
            tempTr.appendChild(DirectoryTd);  
            ChildTBody.appendChild(tempTr);  
        }  
        document.body.appendChild(ParentElement);  
        for(var i=0;i<len;i++)  
        {  
            if(this.SubMenus[i].IsDirectory)  
            {  
                this.SubMenus[i].Create();  
            }  
        }  
    }  
    this.Show=function(e)  
    {  
        if(!this.IsDirectory)  
        {  
            alert("出现错误,该对象不支持Show方法");  
            return false;  
        }  
        if(this.SubMenus.length==0)    return;  
        var ChildHTMLObj=this.ChildMenuHTMLObj;  
        var DWidth=document.body.clientWidth;  
        var DHeight=document.body.clientHeight;  
        var left=document.body.scrollLeft,top=document.body.scrollTop;  
        var x,y;  
        if(this.ParentMenu==null)    //根对象  
        {  
            x=e.clientX,y=e.clientY;  
            if(x+ChildHTMLObj.offsetWidth>DWidth)  
            {  
                x-=ChildHTMLObj.offsetWidth;  
            }  
            if(y+ChildHTMLObj.offsetHeight>DHeight)  
            {  
                y-=ChildHTMLObj.offsetHeight;  
            }  
            x+=left;  
            y+=top;  
        }  
        else 
        {  
            var CurrentHTMLObj=this.HTMLObj;  
            var x=Menu.GetMenuPositionX(CurrentHTMLObj)+CurrentHTMLObj.offsetWidth,y=Menu.GetMenuPositionY(CurrentHTMLObj);  
            if(x+ChildHTMLObj.offsetWidth>DWidth+left)  
            {  
                x-=(CurrentHTMLObj.offsetWidth+ChildHTMLObj.offsetWidth);  
            }  
            if(y+ChildHTMLObj.offsetHeight>DHeight+top)  
            {  
                y-=ChildHTMLObj.offsetHeight;  
                y+=CurrentHTMLObj.offsetHeight;  
            }  
        }  
        ChildHTMLObj.style.left=x;  
        ChildHTMLObj.style.top=y;  
        this.ChildMenuHTMLObj.style.visibility="visible";  
    }  
    this.Hidden=function()  
    {          
        if(!this.IsDirectory)  
        {  
            alert("出现错误,该对象不支持Hidden方法");  
            return false;  
        }  
        var len=this.SubMenus.length;  
        for(var i=0;i<len;i++)  
        {  
            if(this.SubMenus[i].IsDirectory)  
            {  
                this.SubMenus[i].Hidden();  
            }  
        }  
        this.ChildMenuHTMLObj.style.visibility="hidden";  
    }  
    this.MouseOver=function()  
    {  
        this.style.backgroundColor=Menu.Config.OverBgColor;  
        var ParentMenu=this.DataObj.ParentMenu;  
        var len=ParentMenu.SubMenus.length;  
        for(var i=0;i<len;i++)  
        {  
            if(ParentMenu.SubMenus[i].IsDirectory)  
            {  
                ParentMenu.SubMenus[i].Hidden();  
            }  
        }  
        if(this.DataObj.IsDirectory)  
        {  
            this.DataObj.Show();  
        }  
    }  
    this.MouseOut=function()  
    {  
        this.style.backgroundColor=Menu.Config.BgColor;  
    }  
    this.Clear=function()  
    {  
        if(this.IsDirectory)  
        {  
            var len=this.SubMenus.length;  
            for(var i=0;i<len;i++)  
            {  
                if(this.SubMenus[i].IsDirectory)  
                {  
                    this.SubMenus[i].Clear();  
                }  
            }  
        }  
        document.body.removeChild(this.ChildMenuHTMLObj);  
    }  
    this.Click=function()  
    {      
        if(!this.DataObj.IsDirectory)  
        {  
            eval(this.DataObj.Handle);  
            Menu.Config.FirstMenu.Hidden();  
        }  
    }  
}  
//菜单配置  
Menu.Config=  
{  
    FirstMenu:new Menu(true),    //系统定义的第一个菜单,必须为容器(IsDirectory=true)  
    BgColor:"#FFFFFF",    //设置菜单背景颜色  
    OverBgColor:"#B5BED6",    //设置菜单鼠标经过时的背景颜色  
    FontSize:"13px",    //设置菜单字体大小  
    FontColor:"#000000",    //设置菜单字体颜色  
    PerMenuHeight:"25px"    //调整菜单的行距  
};  
Menu.GetMenuPositionX=function(obj)  
{  
    var ParentObj=obj;  
    var left;  
    left=ParentObj.offsetLeft;  
    while(ParentObj=ParentObj.offsetParent){  
        left+=ParentObj.offsetLeft;  
    }  
    return left;  
}  
Menu.GetMenuPositionY=function(obj)  
{  
    var ParentObj=obj;  
    var top;  
    top=ParentObj.offsetTop;  
    while(ParentObj=ParentObj.offsetParent){  
        top+=ParentObj.offsetTop;  
    }  
    return top;  
}  
Menu.Update=function()  
{  
    var FirstMenu=Menu.Config.FirstMenu;  
    FirstMenu.Clear();  
    FirstMenu.Create();  
}  
//事件  
window.onload=function()  
{      
    Menu.Config.FirstMenu.Create();  
    document.oncontextmenu=function(e)  
    {  
        e=e||event  
        Menu.Config.FirstMenu.Show(e);  
        return false;  
    }  
    document.onmousedown=function()  
    {  
        Menu.Config.FirstMenu.Hidden();  
    }  
}  
//*************************************系统实例******************************************  
window.CXP_Menu=Menu.Config.FirstMenu;  
var pg=CXP_Menu.CreateSubMenu();  
pg.Text="程序(P)";  
pg.IsDirectory=true;  
var wd=new Menu(true,"文档(D)");  
CXP_Menu.AppendSubMenu(wd);  
var set=CXP_Menu.CreateSubMenu(true,"设置(S)");  
 
var help=CXP_Menu.CreateSubMenu(false,"帮助(H)");  
help.Handle="alert('这是帮助!')";  
var run=CXP_Menu.CreateSubMenu(false,"运行(R) ...","alert('这是运行!')");  
var exit=new Menu();  
exit.Text="关机(U) ...";  
CXP_Menu.AppendSubMenu(exit);  
//插入菜单  
CXP_Menu.InsertSubMenu(new Menu(false,"Windows Update","if(confirm('此处通向MS官方,您真的要去吗?'))location.href='http://windowsupdate.microsoft.com/'"));  
pg.AppendSubMenu(new Menu(false,"程序1 ..."));  
pg.AppendSubMenu(new Menu(false,"程序2"));  
pg.AppendSubMenu(new Menu(false,"程序4"));  
pg.AppendSubMenu(new Menu(false,"程序5"));  
pg.AppendSubMenu(new Menu(false,"程序6"));  
wd.AppendSubMenu(new Menu(false,"文档1 ..."));  
wd.AppendSubMenu(new Menu(false,"文档2"));  
set.AppendSubMenu(new Menu(false,"设置1 ..."));  
set.AppendSubMenu(new Menu(false,"设置2"));  
var pg3=new Menu(true,"程序3");  
pg3.AppendSubMenu(new Menu(false,"程序4"));  
pg3.AppendSubMenu(new Menu(false,"程序5"));  
pg3.AppendSubMenu(new Menu(false,"程序6 ......."));  
pg.AppendSubMenu(pg3);  
function change()  
{  
    exit.Text="关鸡!";  
    Menu.Update();  
}  
function add()  
{  
    CXP_Menu.AppendSubMenu(new Menu(false,"我是新加的!"));  
    Menu.Update();  
}  
function del()  
{  
    CXP_Menu.RemoveSubMenu(0);  
}  
//-->  
</SCRIPT>  
</HEAD>  
<BODY bgcolor=#000000 leftmargin=0 topmargin=0 style="color:#FFFFFF" mce_style="color:#FFFFFF">  
<input type="button" value="添加新菜单" onclick="add()">  
<input type="button" value="把关机修改成关鸡^_^" onclick="change()">  
<input type="button" value="删除顶菜单" onclick="del()">  
good  
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>  
</BODY>  
</HTML>

分享到:
评论

相关推荐

    javascript右键菜单,兼容各种浏览器

    javascript右键菜单,兼容各种浏览器

    javascript 右键菜单

    JavaScript 右键菜单是一种常见的网页交互功能,它允许用户在网页元素上点击鼠标右键时弹出自定义的上下文菜单。这样的功能可以提供额外的操作选项,增强用户体验。本教程将深入探讨如何使用 JavaScript 实现这一...

    HTML+javaScript右键菜单

    在HTML+JavaScript右键菜单的实现中,JSP可能被用作后端服务,处理与菜单相关的数据请求或逻辑,例如根据用户状态或权限动态生成菜单项。 实现步骤如下: 1. 创建HTML结构:在HTML文件中,定义一个用于存放菜单的...

    右键菜单(javaScript)

    标题中的“右键菜单(javaScript)”指的是使用JavaScript编程语言实现的网页上下文菜单,即当用户在网页上点击鼠标右键时出现的功能性菜单。这种菜单可以替代或扩展浏览器默认的右键菜单,提供更加定制化的用户体验。...

    JavaScript右键菜单

    ### JavaScript右键菜单知识点解析 #### 一、项目概述 本项目主要介绍了一种通过JavaScript实现的右键菜单功能,该功能旨在为用户提供一个便捷、实用的上下文菜单选项。菜单项包括创建、修改和删除等功能,用户可以...

    dtree动态树+Javascript右键菜单

    【dtree动态树】是一种基于...同时,JavaScript右键菜单可以根据用户的权限和上下文提供个性化的操作,如编辑、删除、复制等。通过结合dtree和JavaScript右键菜单,开发者可以创建出功能丰富的交互式Web界面。

    Js右键菜单,js菜单,漂亮的Js右键导航,好用的Js右键菜单

    JavaScript右键菜单的一个关键考虑是浏览器兼容性。由于不同的浏览器可能对事件处理和CSS样式支持程度不同,特别是老版本的Firefox(FF)和Internet Explorer(IE),开发者需要确保代码在这些浏览器中也能正常工作...

    Web右键菜单 很不错的右键菜单

    1. 用户体验:默认的浏览器右键菜单虽然基础,但可能无法满足所有网站的需求。自定义右键菜单可以提供更符合网站特性的操作选项,提高用户的操作效率和满意度。 2. 功能扩展:通过自定义右键菜单,开发者可以添加...

    JavaScript设置右键菜单

    通过以上这些知识点,我们可以构建出一个功能丰富的JavaScript右键菜单系统,不仅可以提供个性化的用户体验,还可以根据业务需求添加更多功能,如复制、粘贴、保存等。在实际项目中,可以结合其他前端框架(如React...

    echarts右键菜单实例 --- 不修改源码

    3. **创建右键菜单**:在 `contextmenu` 事件的回调函数中,阻止浏览器默认的右键菜单弹出,并自定义我们的菜单。这通常涉及到CSS样式的设计以及DOM元素的创建。可以使用 `event.preventDefault()` 阻止默认菜单,...

    禁止鼠标右键及svg中自定义右键菜单

    通过监听`contextmenu`事件并调用`preventDefault()`方法,可以阻止浏览器的默认右键菜单。而在SVG中,我们可以结合CSS和JavaScript创建自定义菜单,以提供更丰富的用户体验。这些技术广泛应用于各种Web应用程序,...

    js树形菜单加右键菜单

    总的来说,结合使用JavaScript实现的树形菜单和右键菜单,可以提供一个高效且直观的用户界面,让用户在复杂的层级数据中进行导航和操作。这种技术在内容管理系统(CMS)、文件管理工具以及其他需要展现层次关系的Web...

    Openlayers扩展右键菜单

    总结来说,OpenLayers扩展右键菜单是一项提高地图应用交互性的技术,涉及到JavaScript事件处理、DOM操作、CSS样式设计以及地图交互逻辑。通过这样的扩展,我们可以让地图应用变得更加灵活且符合用户的使用习惯。

    js右键菜单,菜单项由js动态添加,纯js调用

    本文将深入探讨如何使用JavaScript实现右键菜单,特别是如何动态添加菜单项,并在菜单项中添加图标、文本以及处理点击事件。此外,我们还将讨论在不同浏览器(如IE、Firefox和Chrome)中的兼容性问题。 首先,右键...

    网页添加右键菜单网页添加右键菜单

    为了创建更复杂的自定义菜单,我们可以使用JavaScript来创建DOM元素,模拟出类似浏览器右键菜单的效果。这些元素通常会以弹出框或者下拉菜单的形式出现,用户可以选择其中的项来执行相应的操作。例如,我们可以创建...

    JS设置鼠标右键菜单

    本文将深入探讨如何利用JavaScript实现自定义鼠标右键菜单的功能。 首先,我们需要理解浏览器的默认行为。当用户在网页上点击鼠标右键时,通常会弹出一个包含基本浏览器操作(如"查看源代码"、"保存页面"等)的标准...

    iframe里无右键菜单

    下面是一个简单的JavaScript示例,展示如何在`iframe`中禁用右键菜单: ```html &lt;!DOCTYPE html&gt; 禁用iframe右键菜单 嵌套页面的URL" width="100%" height="500"&gt; // 获取iframe元素 var iframe = ...

    Javascript右键创建菜单源码

    在这里,`oncontextmenu`属性阻止了浏览器默认的右键菜单,而`return false`阻止了事件的默认行为。然后,你可以用JavaScript来处理这个事件: ```javascript document.getElementById('contextTarget')....

    openlayers右键菜单

    总结来说,OpenLayers右键菜单是通过自定义事件监听、HTML/CSS布局和JavaScript事件处理来实现的。这个“不错的demo”为我们提供了一个很好的起点,让我们能够为OpenLayers地图增加更多交互性,提升用户体验。通过...

    好看的javascript网页鼠标右键菜单

    通常,网页上的鼠标右键点击事件会被浏览器默认的上下文菜单所捕获,但通过自定义JavaScript代码,我们可以覆盖这个行为,创建出个性化且功能丰富的右键菜单。 首先,要理解JavaScript事件处理机制。在HTML元素上...

Global site tag (gtag.js) - Google Analytics