网页右键菜单

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script src="js/jquery-1.8.2.min.js"></script>
    <script src="js/Common/RightMenu.js"></script>
    <style type="text/css">
        html, body {
            height: 100%;
        }

        .rightMenu {
            position: absolute;
            top: -9999px;
            left: -9999px;
            font-size: 13px;
        }

            .rightMenu > div, ul, li {
                margin: 0;
                padding: 0;
            }

            .rightMenu ul {
                float: left;
                border: 1px solid #DDDDDD;
                background: #FFFFFF;
                border-radius: 5px;
                padding: 2px;
                list-style-type: none;
                box-shadow: 1px 2px 2px rgba(0,0,0,.3);
            }

                .rightMenu ul ul {
                    display: none;
                    position: absolute;
                }

                .rightMenu ul li {
                    float: left;
                    clear: both;
                    min-width: 128px;
                    height: 34px;
                    cursor: pointer;
                    line-height: 34px;
                    white-space: nowrap;
                    border-bottom: 1px solid #EEEEEE;
                    padding: 0 30px;
                }

                    .rightMenu ul li.sub {
                        background-repeat: no-repeat;
                        background-position: 99% center;
                        background-image: url(/img/arrow.png);
                        background-size: 8px;
                    }

                    .rightMenu ul li.active {
                        background-color: #f1f3f6;
                        border-radius: 3px;
                        height: 34px;
                        line-height: 34px;
                        border: 1px solid #aecff7;
                        padding: 0 29px;
                    }
    </style>
    <script type="text/javascript">
        jQuery(document).ready(function () {
            $("#rightMenu").rightMenu({
                TriggerCondition:‘body‘
            });
        });
    </script>
</head>
<body>
    <div id="rightMenu" class="rightMenu">
        <ul>
            <li>
                <div>JavaScript 学习</div>
                <ul>
                    <li><div>什么是JavaScript</div></li>
                    <li><div>JavaScript基础</div></li>
                </ul>
            </li>
            <li>
                <div>
                    脚本之家
                </div>
                <ul>
                    <li><div>网页特效原理分析</div></li>
                    <li><div>响应用户操作</div></li>
                    <li><div>提示框效果</div></li>
                    <li><div>事件驱动</div></li>
                    <li><div>元素属性操作</div></li>
                </ul>
            </li>
            <li>
                <div>
                    www.jb51.net
                </div>
                <ul>
                    <li><div>改变网页背景颜色</div></li>
                    <li><div>函数传参</div></li>
                    <li><div>高重用性函数的编写</div></li>
                    <li><div>126邮箱全选效果</div></li>
                    <li><div>循环及遍历操作</div></li>
                </ul>
            </li>
            <li>
                <div>
                    第三课
                </div>
                <ul>
                    <li>
                        <div>
                            JavaScript组成
                        </div>
                        <ul>
                            <li><div>ECMAScript</div></li>
                            <li><div>DOM</div></li>
                            <li><div>BOM</div></li>
                            <li><div>JavaScript兼容性来源</div></li>
                        </ul>
                    </li>
                    <li><div>JavaScript出现的位置、优缺点</div></li>
                    <li><div>变量、类型、typeof、数据类型转换、变量作用域</div></li>
                    <li>
                        <div>
                            闭包
                        </div>
                        <ul>
                            <li><div>什么是闭包</div></li>
                            <li><div>简单应用</div></li>
                            <li><div>闭包缺点</div></li>
                        </ul>
                    </li>
                    <li><div>运算符</div></li>
                    <li><div>程序流程控制</div></li>
                    <li>
                        <div>
                            定时器的使用
                        </div>
                        <ul>
                            <li>
                                <div>setInterval</div>
                                <ul>
                                    <li><div>clearInterval</div></li>
                                </ul>
                            </li>
                            <li><div>setTimeout</div></li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul>
    </div>
</body>
</html>

Html 代码

/**
 * 功能用途:右键菜单效果的实现
   TriggerCondition:触发条件(筛选;及右键在点击内容或区域产生该右键菜单。例:‘a‘,‘body‘,‘div[class=xxx]‘,‘#xxxx‘等)
 */
; (function ($) {
    jQuery.fn.rightMenu = function (opts) {
        opts = $.extend({
            TriggerCondition: ‘body‘
        }, opts || {});
        var menuId = $(this).attr(‘id‘);
        return this.each(function () {
            var $showTimer = $hideTimer = null;
            var $maxWidth = $maxHeight = 0;
            // 获取到菜单
            var $objMenuBox = document.getElementById(menuId);
            // 获取菜单中的ul
            var $objUl = $objMenuBox.getElementsByTagName(‘ul‘);
            // 获取菜单中的li
            var $objLi = $objMenuBox.getElementsByTagName(‘li‘);
            // 页面的绝对宽高
            var $docArea = [document.documentElement.offsetWidth, document.documentElement.offsetHeight];
            // 将右键菜单隐藏
            $($objMenuBox).hide();
            // 给有子级菜单的li加上箭头
            $.each($objLi, function () {
                if ($(this).find(‘ul‘).length > 0)
                    $(this).addClass(‘sub‘);
                else
                    $(this).removeClass(‘sub‘);
            });
            // 右键显示菜单
            $(opts.TriggerCondition).contextmenu(function (event) {
                var event = event || window.event;
                // 显示出菜单
                $($objMenuBox).show();
                // 菜单的显示位置
                $objMenuBox.style.top = event.clientY + ‘px‘;
                $objMenuBox.style.left = event.clientX + ‘px‘;

                // 设置菜单中的li的width
                setLiWidth($objUl[0]);

                // 最大显示范围
                $docArea = [document.documentElement.offsetWidth, document.documentElement.offsetHeight];

                $maxWidth = $docArea[0] - $objMenuBox.offsetWidth;
                $maxHeight = $docArea[1] - $objMenuBox.offsetHeight;

                //溢出处理
                if ($objMenuBox.offsetTop > $maxHeight)
                    $objMenuBox.style.top = $maxHeight + ‘px‘;
                if ($objMenuBox.offsetLeft > $maxWidth)
                    $objMenuBox.style.left = $maxWidth + ‘px‘;

                return false;
            });

            // 鼠标悬浮
            $($objLi).mouseover(function (event) {
                event.stopPropagation();
                var $objTL = this;
                var $objChildUl = $objTL.getElementsByTagName(‘ul‘);
                // 给当前li添加选中样式
                $($objTL).addClass(‘active‘);
                $($objTL).parent().parent().addClass(‘active‘);
                clearTimeout($hideTimer);
                // 隐藏父级下所有的子级ul
                $($objTL).siblings().find(‘ul‘).hide();
                // 隐藏子级的所有子级
                $($objChildUl).find(‘ul‘).hide();
                // 如果有子级菜单
                if ($($objChildUl).length > 0)
                {
                    $showTimer = setTimeout(function () {

                        // 显示子菜单
                        $($objChildUl[0]).show();
                        // 子菜单的显示位置
                        $objChildUl[0].style.top = $objTL.offsetTop + ‘px‘;
                        $objChildUl[0].style.left = $objTL.offsetWidth + ‘px‘;

                        // 设置子菜单中li的宽度
                        setLiWidth($objChildUl[0]);

                        // 最大显示范围
                        $docArea = [document.documentElement.offsetWidth, document.documentElement.offsetHeight];
                        $maxWidth = $docArea[0] - $objChildUl[0].offsetWidth;
                        $maxHeight = $docArea[1] - $objChildUl[0].offsetHeight;

                        // 溢出处理
                        if ($maxWidth < getOffset.left($objChildUl[0]))
                            $objChildUl[0].style.left = -$objChildUl[0].clientWidth + ‘px‘;
                        if ($maxHeight < getOffset.top($objChildUl[0]))
                            $objChildUl[0].style.top = -$objChildUl[0].clientHeight + $objTL.offsetTop + $objTL.clientHeight + ‘px‘;

                    }, 300);
                }
            });

            //鼠标离开
            $($objLi).mouseout(function (event) {
                event.stopPropagation();
                var $objTL = this;
                var $objChildUl = $objTL.getElementsByTagName(‘ul‘);
                // 移除li的选中样式
                $($objTL).removeClass(‘active‘);
                clearTimeout($showTimer);
                $hideTimer = setTimeout(function () {
                    // 隐藏子菜单
                    $($objUl).find(‘ul‘).hide();
                    $($objUl).find(‘li‘).removeClass(‘active‘);
                }, 300);
            });

            // 取消菜单
            $(document).click(function () {
                $(‘#‘ + menuId).hide();
            });

            var getOffset = $.extend({
                left: function ($obj) {
                    return $obj.offsetLeft + ($obj.offsetParent ? arguments.callee($obj.offsetParent) : 0);
                },
                top: function ($obj) {
                    return $obj.offsetTop + ($obj.offsetParent ? arguments.callee($obj.offsetParent) : 0);
                }
            });

            function setLiWidth($obj) {
                $maxWidth = 0;
                var $liWidth = 0;
                $.each($obj.children, function () {
                    $liWidth = parseInt($(this)[0].getElementsByTagName(‘div‘)[0].clientWidth);
                    $maxWidth = $liWidth > $maxWidth ? $liWidth : $maxWidth;
                });
                $.each($obj.children, function () {
                    $(this)[0].style.width = $maxWidth + ‘px‘;
                });
            };
        });

    }
})(jQuery);

js (插件)

图片arrow.png 

时间: 2024-10-08 01:17:45

网页右键菜单的相关文章

禁用网页右键菜单和鼠标拖动选择

一.禁止鼠标右键菜单: 有如下两种方法来禁止鼠标右键 1.在HTML元素的Body标签中加入Javascript事件句柄,代码如下: <body onContextMenu="return false"> 说明:您也可以在网页指定的位置禁止右键,比如您只想在网页中的某个图片上禁右键防下载,或您只想在网页中的一段文字或表格上禁右键,您也只需将如上红色代码加入到相应的HTML标签元素中,例: <img src="logo.gif" width=88 h

网页右键菜单开发

拉上窗帘,感慨良多.别让工作占据了所有的生活呀,朝九晚六,回家还能撸猫呀.,猫咪睡觉了,咱还能写代码呀,代码写完了,起码得写篇随笔显摆下呀,别只贴上代码就完事了,你还得介绍开发步骤和心得呀,这也是我这么晚了还来写这篇无聊的随笔的原因. 写代码不是工作,所以我基本是随心所欲,自己想到哪就写到哪,自己开心就好.看到百度云盘(网页版)上面文件夹的右键菜单,才注意到原来网页右键菜单可以人为改变的,于是洗干净粘满猫毛的双手,撸起了键盘,经过几次断断续续的尝试,撸出了一个DEMO. 既然是右键菜单,首先就要

跨浏览器的网页右键菜单的简单实现

本文主要叙述怎样实现右键菜单,以及跨浏览器的右键菜单的实现. 一般在网页页面按下鼠标右键(这个是在windows平台下,而在MAC中则是CTRL+点击),会显示默认的菜单,要显示自定义的右键菜单,则需要取消默认的浏览器行为,显示自定义的菜单.我们先来看一个事件:contextmenu事件,即上下文菜单事件,在windows95首先引入了上下文菜单的概念.不久这个概念逐步被引入web领域,通过这个事件可以解决取消默认菜单的显示,从而显示自定义的菜单,这个事件是冒泡的,即可以通过document来处

完美拖拽 &amp;&amp;仿腾讯微博效果&amp;&amp; 自定义多级右键菜单

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

JavaScript模拟鼠标右键菜单

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>右键菜单</title> <style type="text/css"> *{ margin: 0; padding: 0; } #menu{ width: 254px; /*background-color: #ccc;*/

在windows右键菜单中加入自己的程序 [转载]

原文链接: http://blog.csdn.net/marklr/article/details/4006356 在windows右键菜单中加入自己的程序 标签: windowsattributes扩展commandshell文档 2009-03-20 08:44 3369人阅读 评论(1) 收藏 举报  分类: BCB(12)  修改右键菜单应该在注册表中,具体的说,是在HKEY_CLASSES_ROOT根键下(这里可是右键菜单中所有命令的根源哦!).展开该根键,其下的子键主要有两种:扩展名

Windows右键菜单设置与应用技巧

http://blog.163.com/lee_honleon/blog/static/555251522008014258896/ 需要修改注册表,挺麻烦的.最好还是把迅雷卸了重装,不会影响什么,一会就好了. 如果你一定要改,我这有篇相关文章,给你作参考. 注意,改之前一定先给注册表做个备份,以免以外发生. 一.右键菜单大揭密 在Windows系统中,只要对着桌面或是文件(夹)单击右键,就会弹出一个快捷菜单,里面有对该文件(夹)的一些常用操作命令,通过右键菜单,可以方便用户对文件的某些操作.不

AS3.0下去除flash右键菜单

这两天工作中遇到一个问题,就是网页中内嵌的flash小游戏的用户体验,当鼠标在flash上点击右键时,出现的右键菜单中会有播放,停止等选项,虽然不会造成什么漏洞,但是体验非常差.在寻找解决方案的时候, 找到一个靠谱的思路,就是自己实例化一个菜单,然后用它去替换系统默认的菜单.根绝这个思路,最终解决了问题. 需要注意的是,在解决问题过程中,因为as2.0和3.0版本的差异, 在最终覆盖系统默认菜单的时候需要改变语法.代码如下: AS2.0代码: var contextMenu:contextMen

DIY福音:Firefox菜单及右键菜单ID大全

每一个折腾Firefox的Diyer都是上辈子折翼的天使,致自己! 打磨Firefox界面的时候最多的就隐藏一些平常根本用不上的一些菜单,常规的做法就是安装DOM Inspector扩展右键查找大法寻找相关ID隐藏掉,然而对于新手来说无疑是有一定难度的,这时候这篇文章就用了,查找你需要的隐藏菜单的ID,用 display: none隐藏掉即可. 比如我们要隐藏掉右键菜单里的"发送链接",在Stylish里新建一个样式,写入 #context-savelink{display: none