js右键菜单效果代码

下面我将为你详细讲解如何实现JS右键菜单效果。

准备工作

在实现右键菜单之前,需要对鼠标事件做一些了解。鼠标事件有三个主要的事件:click、mousedown、mouseup。在这三个事件中,只有mousedown事件可以捕获右键操作。因此,我们需要在mousedown事件中判断是否是右键点击,并阻止默认的右键菜单弹出。

实现步骤

  1. 绑定右键菜单事件

我们可以给页面的body绑定mousedown事件,然后判断是否是右键点击。

document.body.addEventListener('mousedown', function(e){
    if(e.button === 2){
        //右键点击
        e.preventDefault(); //阻止默认的右键菜单弹出
        showContextMenu(e.clientX, e.clientY); //显示自定义菜单
    }
});
  1. 显示自定义菜单

当用户右键点击时,需要显示我们自定义的菜单。因此,我们需要编写一个showContextMenu函数来呈现菜单。

function showContextMenu(x, y){
    var menu = document.createElement('div');
    menu.id = 'contextMenu';
    menu.style.position = 'absolute';
    menu.style.left = x + 'px';
    menu.style.top = y + 'px';
    menu.innerHTML = '<ul><li>菜单项1</li><li>菜单项2</li><li>菜单项3</li></ul>';
    document.body.appendChild(menu);
}
  1. 隐藏自定义菜单

当用户点击菜单项或者页面其他区域时,需要隐藏我们自定义的菜单。

document.body.addEventListener('click', function(){
    var contextMenu = document.getElementById('contextMenu');
    if(contextMenu){
        contextMenu.parentNode.removeChild(contextMenu);
    }
});

示例说明

示例1

下面是一个简单的例子来演示如何实现JS右键菜单效果。当用户右键点击时,会显示自定义的菜单,当用户点击菜单项或者页面其他区域时,菜单会隐藏。

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>JS右键菜单效果</title>
    </head>
    <body>
        <script>
            document.body.addEventListener('mousedown', function(e){
                if(e.button === 2){
                    e.preventDefault();
                    showContextMenu(e.clientX, e.clientY);
                }
            });

            function showContextMenu(x, y){
                var menu = document.createElement('div');
                menu.id = 'contextMenu';
                menu.style.position = 'absolute';
                menu.style.left = x + 'px';
                menu.style.top = y + 'px';
                menu.innerHTML = '<ul><li>菜单项1</li><li>菜单项2</li><li>菜单项3</li></ul>';
                document.body.appendChild(menu);
            }

            document.body.addEventListener('click', function(){
                var contextMenu = document.getElementById('contextMenu');
                if(contextMenu){
                    contextMenu.parentNode.removeChild(contextMenu);
                }
            });
        </script>
    </body>
</html>

示例2

下面是一个稍微复杂一些的例子,演示如何根据不同的点击对象显示不同的菜单。

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>JS右键菜单效果</title>
    </head>
    <body>
        <div class="item">
            <h3>项目1</h3>
            <p>项目1的内容</p>
        </div>
        <div class="item">
            <h3>项目2</h3>
            <p>项目2的内容</p>
        </div>
        <div class="item">
            <h3>项目3</h3>
            <p>项目3的内容</p>
        </div>
        <script>
            var currentItem = null; //记录当前的点击对象

            document.body.addEventListener('mousedown', function(e){
                if(e.button === 2){
                    e.preventDefault();
                    var target = e.target;
                    while(target !== document.body){
                        if(target.className.indexOf('item') !== -1){
                            //如果是项目区域,记录当前的点击对象
                            currentItem = target;
                            break;
                        }
                        target = target.parentNode;
                    }
                    showContextMenu(e.clientX, e.clientY, currentItem);
                }
            });

            function showContextMenu(x, y, item){
                var menu = document.createElement('div');
                menu.id = 'contextMenu';
                menu.style.position = 'absolute';
                menu.style.left = x + 'px';
                menu.style.top = y + 'px';
                if(item){
                    //根据当前的点击对象显示不同的菜单项
                    menu.innerHTML = '<ul><li>编辑</li><li>删除</li></ul>';
                }else{
                    menu.innerHTML = '<ul><li>新建</li></ul>';
                }
                document.body.appendChild(menu);
            }

            document.body.addEventListener('click', function(){
                var contextMenu = document.getElementById('contextMenu');
                if(contextMenu){
                    contextMenu.parentNode.removeChild(contextMenu);
                }
                currentItem = null;
            });
        </script>
    </body>
</html>

以上就是JS右键菜单效果的完整攻略,希望能对你有所帮助。

阅读剩余 71%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js右键菜单效果代码 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Antd的Table组件嵌套Table以及选择框联动操作

    Antd的Table组件嵌套Table以及选择框联动操作攻略 Ant Design (Antd) 是一个流行的 React UI 组件库,其中的 Table 组件提供了丰富的功能和灵活的配置选项。本攻略将详细讲解如何在 Antd 的 Table 组件中嵌套另一个 Table 组件,并实现选择框的联动操作。 步骤一:准备工作 首先,确保你已经安装了 Antd …

    other 2023年7月28日
    00
  • Android控件系列之相册Gallery&Adapter适配器入门&控件缩放动画入门

    文章概述: 本篇文章介绍了Android中的两个常用控件——相册Gallery和适配器Adapter,并将介绍使用Gallery时实现图片控件缩放动画的方法。其中,将会针对这些控件的使用方法、属性以及实现原理进行详细解析,并提供两个实例按照步骤讲解。 一、Gallery控件 Gallery是Android原生控件中最早的一个图片浏览控件,但在2011年作为过…

    other 2023年6月27日
    00
  • WebStorm(Amaze开发工具)–JavaScript 开发工具

    WebStorm(Amaze开发工具)——JavaScript 开发工具 WebStorm是一款由JetBrains公司推出的JavaScript集成开发环境,非常适合JavaScript开发者。它的强大之处在于提供了丰富的功能和组件,包括代码自动完成、代码检查、调试、测试、版本控制、监控等等。此外,WebStorm还有诸如自动格式化代码、重构代码、语法高亮…

    其他 2023年3月28日
    00
  • 怎么修改电脑默认的Administrator账号的名称

    修改电脑默认的Administrator账号的名称可以通过以下步骤进行: 1. 打开计算机管理控制台 首先,我们需要打开计算机管理控制台。可以通过以下两种方法打开: 通过Win+X快捷键打开后选择计算机管理 通过依次点击“开始菜单 – Windows系统 – 控制面板 – 管理工具 – 计算机管理”打开 2. 找到本地用户和组 在计算机管理控制台中,我们需要…

    other 2023年6月27日
    00
  • 易语言保存文件时通用对话框给该文件加上指定的后缀名

    易语言保存文件时通用对话框给该文件加上指定的后缀名攻略 在易语言中,可以使用通用对话框来保存文件,并给该文件加上指定的后缀名。下面是一个详细的攻略,包含了两个示例说明。 步骤一:创建通用对话框 首先,我们需要创建一个通用对话框,用于保存文件。可以使用创建通用对话框函数来实现: 创建通用对话框(\"保存文件\", \"保存\&qu…

    other 2023年8月5日
    00
  • 详解C++字符串常用操作函数(查找、插入、截取、删除等)

    C++字符串是编程中常用的数据类型之一,字符串常用的操作函数有很多,本文一一介绍并附带示例,内容包括字符串的查找、插入、截取、删除等操作: 1. 查找 字符串查找操作有几个函数可以使用:find()、rfind()、find_first_of()、find_last_of()、find_first_not_of()、find_last_not_of()。主要…

    other 2023年6月20日
    00
  • circle是什么意思

    在计算机领域,circle(圆)通常指代一个图形或者编程中的一个对象,该对象以一定半径和颜色进行描述。下面我将提供两个示例,为您进一步解释circle的含义。 示例一:circle作为HTML和CSS中的图形 在 HTML 和 CSS 开发中,<circle> 标签定义一个圆,是 SVG (可缩放矢量图形) 的一部分。 以下是一个示例代码: &l…

    其他 2023年4月16日
    00
  • spark在windows下的安装

    Spark在Windows下的安装 Apache Spark是一个流行的开源分布式计算框架,它可以用于处理大规模数据集。在本文中,我们将详细介绍如何在Windows操作系统上安装配置Apache Spark。 步骤1:下载和安装Java 在安装Spark之前,我们需要先安装Java。我们可以从Oracle官网下载Java Development Kit(JD…

    other 2023年5月8日
    00
合作推广
合作推广
分享本页
返回顶部