zoukankan      html  css  js  c++  java
  • 网页右键菜单

    <!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- 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 图片arrow.png 

  • 相关阅读:
    Tips for Hoops 3D & ACIS
    把书读薄TICPP(2)
    Software Toolbox EasyOPC简介
    Wonderware InSQL and Incurity安装心得
    Linux root password reset
    SQL Server 2005 的搞笑
    SVG 简介
    M0n0wall 是什么?
    Solaris 上调试系统 hang 的总结
    DDNS简介
  • 原文地址:https://www.cnblogs.com/NigelShi/p/5067405.html
Copyright © 2011-2022 走看看