JS简单实现自定义右键菜单实例

yizhihongxing

下面我会详细讲解如何简单实现自定义右键菜单的过程。

第一步:HTML结构准备

首先,需要定义一个HTML结构,包含菜单需要绑定的元素。

<!-- 定义需要绑定右键菜单的区域 -->
<div id="menu-wrap">
  <ul id="context-menu" class="context-menu">
    <li class="edit">编辑</li>
    <li class="delete">删除</li>
  </ul>
</div>

第二步:CSS样式设置

接着,需要设置CSS样式,让菜单显示位置、字体等符合需求。

/* 右键菜单的样式设定 */
.context-menu {
  background-color: #fff;
  border: 1px solid #ccc;
  z-index: 9999;
  position: absolute;
  display: none;
  list-style: none;
  padding: 0;
}

/* 菜谱项样式设置 */
.context-menu li {
  padding: 5px 10px;
  cursor: pointer;
}

.context-menu li:hover {
  background-color: #f2f2f2;
}

第三步:JS代码编写

最后,需要编写JS代码,实现右键菜单的显示和功能。

1、绑定右键菜单

首先,需要绑定右键菜单的显示事件,代码如下:

// 绑定右键菜单事件
document.addEventListener('contextmenu', function(e) {

  e.preventDefault(); // 禁用默认的右键菜单事件
  var menu = document.querySelector("#context-menu");

  // 计算菜单显示位置
  var screenWidth = window.innerWidth; // 当前屏幕宽度
  var screenHeight = window.innerHeight; // 当前屏幕高度
  var menuWidth = menu.offsetWidth; // 菜单宽度
  var menuHeight = menu.offsetHeight; // 菜单高度
  var xPos = e.clientX; // 鼠标x坐标位置
  var yPos = e.clientY; // 鼠标y坐标位置

  // 如果距离右边屏幕距离过近,需要调整菜单x坐标位置
  if (xPos + menuWidth > screenWidth) {
    xPos -= menuWidth;
  }

  // 如果距离底部屏幕距离过近,需要调整菜单y坐标位置
  if (yPos + menuHeight > screenHeight) {
    yPos -= menuHeight;
  }

  // 显示右键菜单
  menu.style.left = xPos + "px";
  menu.style.top = yPos + "px";
  menu.style.display = "block";

});

这段代码实现了绑定右键菜单的显示事件,当用户右键单击菜单需要绑定的元素时,会显示一个自定义的右键菜单。

2、设置菜单点击事件

然后,需要给每个菜单项设置点击事件,代码如下:

// 绑定菜单项点击事件
document.addEventListener('click', function(e) {

  var menu = document.querySelector("#context-menu");

  // 如果点击的是菜单项,执行对应的操作
  switch (e.target.className) {
    case "edit":
      // 点击了“编辑”菜单项的操作
      break;
    case "delete":
      // 点击了“删除”菜单项的操作
      break;
  }

  // 隐藏右键菜单
  menu.style.display = "none";

});

这段代码实现了菜单项的点击事件,用户点击每个菜单项时,会执行对应的操作,比如编辑或删除。

示例解释

下面是两个示例,说明如何使用这段代码实现自定义右键菜单的功能。

示例1

在某个网页中,右键单击网页中的一段文字,弹出一个自定义右键菜单,包含“复制”和“粘贴”两个菜单项。用户点击“复制”菜单项后,会将文字复制到剪贴板中。

HTML结构

<div id="menu-wrap">
  <ul id="context-menu" class="context-menu">
    <li class="copy">复制</li>
    <li class="paste">粘贴</li>
  </ul>
  <p>你要复制的文字...</p>
</div>

CSS样式

/* 右键菜单的样式设定 */
.context-menu {
  background-color: #fff;
  border: 1px solid #ccc;
  z-index: 9999;
  position: absolute;
  display: none;
  list-style: none;
  padding: 0;
}

/* 菜谱项样式设置 */
.context-menu li {
  padding: 5px 10px;
  cursor: pointer;
}

.context-menu li:hover {
  background-color: #f2f2f2;
}

JS代码

// 绑定右键菜单事件
document.addEventListener('contextmenu', function(e) {

  e.preventDefault(); // 禁用默认的右键菜单事件
  var menu = document.querySelector("#context-menu");

  // 计算菜单显示位置
  var screenWidth = window.innerWidth; // 当前屏幕宽度
  var screenHeight = window.innerHeight; // 当前屏幕高度
  var menuWidth = menu.offsetWidth; // 菜单宽度
  var menuHeight = menu.offsetHeight; // 菜单高度
  var xPos = e.clientX; // 鼠标x坐标位置
  var yPos = e.clientY; // 鼠标y坐标位置

  // 如果距离右边屏幕距离过近,需要调整菜单x坐标位置
  if (xPos + menuWidth > screenWidth) {
    xPos -= menuWidth;
  }

  // 如果距离底部屏幕距离过近,需要调整菜单y坐标位置
  if (yPos + menuHeight > screenHeight) {
    yPos -= menuHeight;
  }

  // 显示右键菜单
  menu.style.left = xPos + "px";
  menu.style.top = yPos + "px";
  menu.style.display = "block";

});

// 绑定菜单项点击事件
document.addEventListener('click', function(e) {

  var menu = document.querySelector("#context-menu");

  // 如果点击的是菜单项,执行对应的操作
  switch (e.target.className) {
    case "copy":
      // 复制选中的文字
      document.execCommand("copy");
      break;
    case "paste":
      // 粘贴剪贴板中的内容
      document.execCommand("paste");
      break;
  }

  // 隐藏右键菜单
  menu.style.display = "none";

});

示例2

在某个网站后台管理系统的列表页中,右键单击某一行数据,弹出一个自定义右键菜单,包含“编辑”和“删除”两个菜单项。用户点击“删除”菜单项后,会弹出一个确认框,确认是否删除该行数据。

HTML结构

<div id="menu-wrap">
  <ul id="context-menu" class="context-menu">
    <li class="edit">编辑</li>
    <li class="delete">删除</li>
  </ul>
  <table>
    <tr>
      <td>数据1</td>
      <td>数据2</td>
      <td>数据3</td>
    </tr>
    <tr>
      <td>数据1</td>
      <td>数据2</td>
      <td>数据3</td>
    </tr>
    <tr>
      <td>数据1</td>
      <td>数据2</td>
      <td>数据3</td>
    </tr>
  </table>
</div>

CSS样式

/* 右键菜单的样式设定 */
.context-menu {
  background-color: #fff;
  border: 1px solid #ccc;
  z-index: 9999;
  position: absolute;
  display: none;
  list-style: none;
  padding: 0;
}

/* 菜谱项样式设置 */
.context-menu li {
  padding: 5px 10px;
  cursor: pointer;
}

.context-menu li:hover {
  background-color: #f2f2f2;
}

JS代码

// 绑定右键菜单事件
document.addEventListener('contextmenu', function(e) {

  e.preventDefault(); // 禁用默认的右键菜单事件
  var menu = document.querySelector("#context-menu");

  // 计算菜单显示位置
  var screenWidth = window.innerWidth; // 当前屏幕宽度
  var screenHeight = window.innerHeight; // 当前屏幕高度
  var menuWidth = menu.offsetWidth; // 菜单宽度
  var menuHeight = menu.offsetHeight; // 菜单高度
  var xPos = e.clientX; // 鼠标x坐标位置
  var yPos = e.clientY; // 鼠标y坐标位置

  // 如果距离右边屏幕距离过近,需要调整菜单x坐标位置
  if (xPos + menuWidth > screenWidth) {
    xPos -= menuWidth;
  }

  // 如果距离底部屏幕距离过近,需要调整菜单y坐标位置
  if (yPos + menuHeight > screenHeight) {
    yPos -= menuHeight;
  }

  // 显示右键菜单
  menu.style.left = xPos + "px";
  menu.style.top = yPos + "px";
  menu.style.display = "block";

});

// 绑定菜单项点击事件
document.addEventListener('click', function(e) {

  var menu = document.querySelector("#context-menu");

  // 如果点击的是菜单项,执行对应的操作
  switch (e.target.className) {
    case "edit":
      // 点击了“编辑”菜单项的操作
      break;
    case "delete":
      // 点击了“删除”菜单项的操作
      if (confirm("确认删除该行数据?")) {
        e.target.parentNode.parentNode.remove();
      }
      break;
  }

  // 隐藏右键菜单
  menu.style.display = "none";

});

这两个示例可以为我们提供思路,在实际应用中根据需求进行调整和扩展。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS简单实现自定义右键菜单实例 - Python技术站

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

相关文章

  • 菜鸟必备:个人电脑端口完全解析

    菜鸟必备:个人电脑端口完全解析 简介 个人电脑作为日常生活中使用最多的电子设备之一,端口作为它与外部设备进行交互的关键,对于端口的了解是每个电脑使用者必备的知识。本文将详细解析个人电脑常见端口的功能、特点及应用场景,让菜鸟用户能够掌握端口的基本知识,进一步提高自己的电脑使用能力。 USB 简介 USB(Universal Serial Bus),付费标准接口…

    other 2023年6月27日
    00
  • 五子棋ai(aipha-beta算法)

    当然,我很乐意为您提供有关五子棋AI(Alpha-Beta算法)的完整攻略。以下是详细的步骤和两个示例: 1. 什么是Alpha-Beta算法? Alpha-Beta算法是一种用于博弈树搜索的剪枝算法。它可以有效地减少搜索的节点数,从而提高搜索效率。在五子棋AI中,Alpha-Beta算法可以用于搜索最佳落子位置。 2. Alpha-Beta算法的基本原理 …

    other 2023年5月6日
    00
  • 加载gif动画的三种方式

    加载gif动画的三种方式 在网页设计中,动画是一个非常常用的元素。而其中一种最为常见的动画就是gif格式的动画。如何在网页中加载gif动画呢?本文将介绍三种常用的方式。 1. 直接使用gif图片 最为简单的方式便是直接使用gif图片。只需在html代码中插入如下代码即可: <img src="example.gif" alt=&qu…

    其他 2023年3月29日
    00
  • 前端css基础

    前端CSS基础攻略 CSS是前端开发中不可或缺的一部分,它用于控制网页的样式和布局。本攻略将介绍CSS的基础知识,包括选择器、样式、布局等内容。 选择器 选择器用于选择要应用样式的HTML元素。以下是一些常见的选择器: 标签选择器:选择所有指定标签的元素。例如,p选择所有<p>元素。 类选择器:选择所有指定类的元素。例如,.example选择所有…

    other 2023年5月7日
    00
  • Spring Cloud微服务(一):公共模块的搭建

    Spring Cloud微服务(一):公共模块的搭建 前言 随着微服务架构在企业中的普及,一些公共的组件和库的使用变得越来越重要。本文将介绍如何在Spring Cloud微服务架构下构建公共模块。 模块的创建 我们可以在单独的一个Spring Boot项目中创建公共模块。使用Maven来管理依赖,确保依赖的唯一性,从而避免出现兼容性问题。 创建Maven项目…

    其他 2023年3月28日
    00
  • android开发中的单例模式应用详解

    以下是关于“Android开发中的单例模式应用详解”的完整攻略,包括基本概念、步骤和两个示例。 基本概念 在Android开发中,单例模式是一种常用的设计模式,它可以确保一个类只有一个实例,并提供全局访问点。单例模式可以避免重复创建对象,节省内存空间,提高程序性能。 步骤 以下是在Android开发中使用单例模式的步骤: 创建一个类:首先,需要创建一个类,这…

    other 2023年5月7日
    00
  • java编程abstract类和方法详解

    第一步,我们需要明确什么是Java中的抽象类和抽象方法。 什么是抽象类? Java中的抽象类是一种不能被实例化的类,它被用来在类层次结构中表示一个通用的概念或者抽象的基类。 抽象类中可以定义成员变量,构造方法,普通方法,也可以包含抽象方法。抽象类不能被实例化,只有子类可以继承抽象类并实现其中的抽象方法。 什么是抽象方法? 抽象方法是一种没有实现的方法,它只有…

    other 2023年6月26日
    00
  • Win10 Mobile Build 15254.544正式版累积更新推送: 补丁型号KB4478936

    Win10 Mobile Build 15254.544正式版累积更新推送: 补丁型号KB4478936攻略 简介 Win10 Mobile Build 15254.544正式版累积更新是针对Windows 10 Mobile操作系统的一个重要更新。该更新的补丁型号为KB4478936。本攻略将详细介绍如何安装和应用这个累积更新。 步骤 检查更新可用性:首先…

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