右键添加菜单

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>自定义多级右键菜单</title>
<style type="text/css">
html,body{height:100%;overflow:hidden;}
body,div,ul,li{margin:0;padding:0;}
body{font:12px/1.5 \5fae\8f6f\96c5\9ed1;}
ul{list-style-type:none;}
#rightMenu{position:absolute;top:-9999px;left:-9999px;}
#rightMenu ul{float:left;border:1px solid #979797;}
#rightMenu ul li{float:left;clear:both;height:24px;cursor:pointer;line-height:24px;white-

space:nowrap;padding:0 30px;}
#rightMenu ul li.sub{background-repeat:no-repeat;background-position:right 9px;}
#rightMenu ul li.active{background-color:#f1f3f6;border-radius:3px;border:1px solid 

#aecff7;height:22px;line-height:22px;background-position:right -8px;padding:0 29px;}
#rightMenu ul ul{display:none;position:absolute;}
</style>
<script type="text/javascript">
var getOffset = {
    top: function (obj) {
        return obj.offsetTop + (obj.offsetParent ? arguments.callee(obj.offsetParent) : 0)  

    },
    left: function (obj) {
        return obj.offsetLeft + (obj.offsetParent ? arguments.callee(obj.offsetParent) : 0) 

    }
};
window.onload = function ()
{
    var oMenu = document.getElementById("rightMenu");
    var aUl = oMenu.getElementsByTagName("ul");
    var aLi = oMenu.getElementsByTagName("li");
    var showTimer = hideTimer = null;
    var i = 0;
    var maxWidth = maxHeight = 0;
    var aDoc = [document.documentElement.offsetWidth, 

document.documentElement.offsetHeight];  

    oMenu.style.display = "none";  

    for (i = 0; i < aLi.length; i++)
    {
        //为含有子菜单的li加上箭头
        aLi[i].getElementsByTagName("ul")[0] && (aLi[i].className = "sub");  

        //鼠标移入
        aLi[i].onmouseover = function ()
        {
            var oThis = this;
            var oUl = oThis.getElementsByTagName("ul");  

            //鼠标移入样式
            oThis.className += " active";             

            //显示子菜单
            if (oUl[0])
            {
                clearTimeout(hideTimer);
                showTimer = setTimeout(function ()
                {
                    for (i = 0; i < oThis.parentNode.children.length; i++)
                    {
                        oThis.parentNode.children[i].getElementsByTagName("ul")[0] &&
                        (oThis.parentNode.children[i].getElementsByTagName("ul")

[0].style.display = "none");
                    }
                    oUl[0].style.display = "block";
                    oUl[0].style.top = oThis.offsetTop + "px";
                    oUl[0].style.left = oThis.offsetWidth + "px";
                    setWidth(oUl[0]);  

                    //最大显示范围
                    maxWidth = aDoc[0] - oUl[0].offsetWidth;
                    maxHeight = aDoc[1] - oUl[0].offsetHeight;  

                    //防止溢出
                    maxWidth < getOffset.left(oUl[0]) && (oUl[0].style.left = -oUl

[0].clientWidth + "px");
                    maxHeight < getOffset.top(oUl[0]) && (oUl[0].style.top = -oUl

[0].clientHeight + oThis.offsetTop + oThis.clientHeight + "px")
                },300);
            }
        };  

        //鼠标移出
        aLi[i].onmouseout = function ()
        {
            var oThis = this;
            var oUl = oThis.getElementsByTagName("ul");
            //鼠标移出样式
            oThis.className = oThis.className.replace(/\s?active/,"");  

            clearTimeout(showTimer);
            hideTimer = setTimeout(function ()
            {
                for (i = 0; i < oThis.parentNode.children.length; i++)
                {
                    oThis.parentNode.children[i].getElementsByTagName("ul")[0] &&
                    (oThis.parentNode.children[i].getElementsByTagName("ul")

[0].style.display = "none");
                }
            },300);
        };
    }     

    //自定义右键菜单
    document.oncontextmenu = function (event)
    {
        var event = event || window.event;
        oMenu.style.display = "block";
        oMenu.style.top = event.clientY + "px";
        oMenu.style.left = event.clientX + "px";
        setWidth(aUl[0]);  

        //最大显示范围
        maxWidth = aDoc[0] - oMenu.offsetWidth;
        maxHeight = aDoc[1] - oMenu.offsetHeight;  

        //防止菜单溢出
        oMenu.offsetTop > maxHeight && (oMenu.style.top = maxHeight + "px");
        oMenu.offsetLeft > maxWidth && (oMenu.style.left = maxWidth + "px");
        return false;
    };  

    //点击隐藏菜单
    document.onclick = function ()
    {
        oMenu.style.display = "none"
    };  

    //取li中最大的宽度, 并赋给同级所有li
    function setWidth(obj)
    {
        maxWidth = 0;
        for (i = 0; i < obj.children.length; i++)
        {
            var oLi = obj.children[i];
            var iWidth = oLi.clientWidth - parseInt(oLi.currentStyle ? oLi.currentStyle

["paddingLeft"] : getComputedStyle(oLi,null)["paddingLeft"]) * 2
            if (iWidth > maxWidth) maxWidth = iWidth;
        }
        for (i = 0; i < obj.children.length; i++) obj.children[i].style.width = maxWidth + 

"px";
    }
};
</script>
</head>
<body>
<center>自定义右键菜单,请在页面点击右键查看效果。</center>
<div id="rightMenu">
    <ul>
        <li><strong>JavaScript 学习</strong></li>
        <li>
            第一课
            <ul>
                <li>网页特效原理分析</li>
                <li>响应用户操作</li>
                <li>提示框效果</li>
                <li>事件驱动</li>
                <li>元素属性操作</li>
            </ul>
        </li>
        <li>
            第二课
            <ul>
                <li>改变网页背景颜色</li>
                <li>函数传参</li>
                <li>高重用性函数的编写</li>
                <li>126邮箱全选效果</li>
                <li>循环及遍历操作</li>
            </ul>
        </li>
        <li>
            第三课
            <ul>
                <li>
                    JavaScript组成
                    <ul>
                        <li>ECMAScript</li>
                        <li>DOM</li>
                        <li>BOM</li>
                        <li>JavaScript兼容性来源</li>
                    </ul>
                </li>
                <li>JavaScript出现的位置、优缺点</li>
                <li>变量、类型、typeof、数据类型转换、变量作用域</li>
                <li>
                    闭包
                    <ul>
                        <li>什么是闭包</li>
                        <li>简单应用</li>
                        <li>闭包缺点</li>
                    </ul>
                </li>
                <li>运算符</li>
                <li>程序流程控制</li>
                <li>
                    定时器的使用
                    <ul>
                        <li>setInterval</li>
                        <li>setTimeout</li>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
</div>
</body>
</html>  
时间: 2024-10-25 01:50:06

右键添加菜单的相关文章

VS工具如何新建筛选器,为何右键添加菜单只有新建文件夹,没有新建筛选器

最近,遇到了一个问题,别人用VS工具新建了一个工程,不知道怎么的,就是没有办法新建筛选器. 今天,终于解决了,记录下,也希望能够帮助更多的人. 当我们的工程目录里的文件越来越多的时候,这时候需要建立帅选器来进行文件分类.其实,用VS工具建立的工程,默认是有刷选器的.如图所示: 从上图可以看到,默认的筛选器,头文件.源文件.资源文件,已经为我们定义好了. 如果你的VS工具建立的工程,没有显示上面的文件夹,原因是你选择了显示所有文件. 从上图可以看到,头文件.源文件目录都没有了. 只要再次点击显示所

WPF中给listbox里边的右键添加菜单

1.在listbox的属性里面找到ContextMenu 2.点下拉按钮添加绑定. 然后在窗体加载时添加集合或者在XAML编辑栏用ItemSource添加, 两种添加方法不能同时启用,如果在XAML编辑中定义了ItemSource,则窗体加载时不能操作Items,Add,但是可以在按钮点击或者其他事件中操作.

win8.1右键新建菜单添加新建php文件

最近在学习php没使用IDE,一直使用编辑器,但每次新建文件都要手动该扩展名比较麻烦.于是想着能不能在右键新建菜单直接新建php文件.于是开始百度... 步骤一:win+R打开运行(管理员身份运行) 步骤二:找到.php扩展名注册的项在HKEY_CLASSES_ROOT项下ctrl+F查找.php的项,这个时候这个项下一般是没有东西的. 1.右键添加新建项ShellNew 2.在刚添加的ShellNew上右键添加字符串值NullFile,默认为空就好. 3.如果你按照百度搜的也是我这么来的 那你

在浏览器右键添加自定义菜单

在浏览器右键添加自定义菜单 Afly | 2006-11-8 其实就是类似当安装完 Flashget 后 Internet Explorer 的右键多了"使用网际快车下载"的选项一样,现在我们的需求是:当我们在图片右键时出现"复制图像地址"的选项. 其实很简单,先把下列代码存为 abc.reg 并导入: Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Interne

鼠标右键添加项目 注册表 注意

右键项目 HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers HKEY_CLASSES_ROOT\Directory\shell HKEY_CLASSES_ROOT\Directory\shellex\ContextMenuHandlers HKEY_CLASSES_ROOT\Folder\shell HKEY_CLASSES_ROOT\Folder\shellex\ContextMenuHandlers hkey_classes_root\folde

VC++2010添加菜单

1  资源视图下面右键添加资源 选择menu 2  创建你想要的menu 3  找到CDialog::OnInitDialog();在后面添加代码. CMenu menu; menu.LoadMenuW(IDR_MENU1); SetMenu(&menu); VC++2010添加菜单

如何在VS2010的VC++ 基于对话框的MFC程序中添加菜单

方法1:亲测 成功  转载自https://social.msdn.microsoft.com/Forums/vstudio/zh-CN/48338f6b-e5d9-4c0c-8b17-05ca3ef1f761/vs2010dialog 你可以创建菜单作为一种资源,然后将它附加到对话框.打开dialog“属性”对话框,你可以看到一个Menu属性,最终我们将在这里指定一个我们自己创建的菜单ID. 具体步骤如下: •在资源视图中右键单击工程名,插入一个新的菜单.这个菜单会有一个ID(例如:IDR_M

Windows系统下增删右键新建菜单

绝大多数的Windows系统下右键新建菜单都有长长的一串子项,例如WinRAR和Office全家.PS等菜单.如果配置比较低或者正在运行高资源占用的程序时,右键划过新建项时系统会卡卡的严重的时候会卡死掉. 而有些时候我们又需要频繁的建立某类型的文件,如果可以从右键直接创建就会方便很多.特别是Windows现在重命名的方式把文件名和后缀分开编辑,要多点几下才能修改到后缀名. 删除多余的右键菜单 我们需要删除的是多余的右键菜单,而不是全部,那么首先要知道需要删除的文件格式是什么 在桌面右键新建出需要

右键添加 CMD 命令提示符

# 右键添加 CMD 命令提示符 当然是修改注册表 - 打开注册表编辑器(按下Win+R打开运行对话框,输入regedit),找到[HKEY_CLASSES_ROOT/Folder/shell] 子键,在其下面新建名为"command prompt"的 项,再在这个项下面新建名为 "Command" 的 项. - 选择 "command" 项,把"默认"字符窜值的数据设为c:\windows\system32\cmd.exe