JavaScript自定义鼠标右键菜单栏

下面我将为大家讲解 JavaScript 自定义鼠标右键菜单栏的完整攻略。

实现思路

实现 JavaScript 自定义鼠标右键菜单栏的基本思路如下:

  1. 监听右键菜单事件,捕获鼠标点击坐标;
  2. 动态创建 <div> 元素,设置其样式、定位,同时设置 display:none 隐藏起来;
  3. 将该 <div> 元素添加到 <body> 元素中;
  4. 再次监听右键菜单事件,根据鼠标点击的坐标,在 <div> 元素中生成菜单项;
  5. 监听菜单项的点击事件,执行相应的操作。

代码实现

下面是 JavaScript 自定义鼠标右键菜单栏的一段简单实现示例:

let menuDiv = document.createElement('div');
menuDiv.innerHTML = '<ul><li>菜单项1</li><li>菜单项2</li><li>菜单项3</li></ul>';
menuDiv.style.display = 'none';
menuDiv.style.position = 'absolute';
menuDiv.style.backgroundColor = '#fff';
menuDiv.style.width = '100px';
menuDiv.style.border = '1px solid #ccc';

document.body.appendChild(menuDiv);

// 右键菜单事件
document.addEventListener('contextmenu', function (e) {
  e.preventDefault();
  menuDiv.style.display = 'block';
  menuDiv.style.left = e.clientX + 'px';
  menuDiv.style.top = e.clientY + 'px';
});

// 菜单项点击事件
menuDiv.addEventListener('click', function (e) {
  if (e.target.nodeName.toLocaleLowerCase() === 'li') {
    console.log(e.target.innerHTML);
  }
  menuDiv.style.display = 'none';
});

在这段代码中,首先创建一个 <div> 元素,用于存放右键菜单栏的内容。在右键菜单事件中,指定该 <div> 的位置,并显示出来。在菜单项点击事件中,判断点击的是哪个菜单项,并执行相应的操作,同时隐藏该菜单栏。

示例说明

下面给出一个带有子菜单的完整示例:

let contextMenu = {
  '菜单项1': function () { console.log('菜单项1') },
  '菜单项2': function () { console.log('菜单项2') },
  '菜单项3': {
    '菜单项3-1': function () { console.log('菜单项3-1') },
    '菜单项3-2': function () { console.log('菜单项3-2') },
    '菜单项3-3': {
      '菜单项3-3-1': function () { console.log('菜单项3-3-1') },
      '菜单项3-3-2': function () { console.log('菜单项3-3-2') }
    }
  }
};

function createContextMenu(data) {
  let menuDiv = document.createElement('div');
  let menuHtml = '';
  for (let key in data) {
    if (typeof data[key] === 'function') {
      menuHtml += '<li>' + key + '</li>'
    } else if (typeof data[key] === 'object') {
      menuHtml += '<li>' + key + createContextMenu(data[key]) + '</li>'
    }
  }
  menuDiv.innerHTML = '<ul>' + menuHtml + '</ul>';
  menuDiv.style.display = 'none';
  menuDiv.style.position = 'absolute';
  menuDiv.style.backgroundColor = '#fff';
  menuDiv.style.width = '150px';
  menuDiv.style.border = '1px solid #ccc';
  return menuDiv.outerHTML;
}

document.body.innerHTML += createContextMenu(contextMenu);

let menuDiv = document.querySelector('#menu');

// 右键菜单事件
document.addEventListener('contextmenu', function (e) {
  e.preventDefault();
  if (e.target.nodeName.toLocaleLowerCase() === 'li') {
    return;
  }
  menuDiv.style.display = 'block';
  menuDiv.innerHTML = createContextMenu(contextMenu);
  menuDiv.style.left = e.clientX + 'px';
  menuDiv.style.top = e.clientY + 'px';
});

// 菜单项点击事件
menuDiv.addEventListener('click', function (e) {
  if (e.target.nodeName.toLocaleLowerCase() === 'li') {
    let key = e.target.innerText;
    if (typeof contextMenu[key] === 'function') {
      contextMenu[key]();
      menuDiv.style.display = 'none';
    } else if (typeof contextMenu[key] === 'object') {
      menuDiv.innerHTML = createContextMenu(contextMenu[key]);
    }
  }
});

这个示例中,定义了一个 contextMenu 对象,用于描述右键菜单栏的内容,包括三个菜单项,其中第三个菜单项还包含两个子菜单。使用 createContextMenu() 函数动态生成菜单栏的 HTML 代码,然后将其插入到 <body> 元素中。右键菜单事件触发后,根据鼠标点击的位置动态调整菜单栏的内容和位置。菜单项点击事件触发后,根据点击的菜单项执行相应的操作或显示子菜单。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript自定义鼠标右键菜单栏 - Python技术站

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

相关文章

  • CSS教程,让网页对搜索引擎更友好

    下面是“CSS教程,让网页对搜索引擎更友好”的完整攻略。 一、为什么CSS可以优化网页对搜索引擎友好 CSS作为网页设计中的重要组成部分,不仅可以帮助网页实现美观的效果,同时也可以优化网页对搜索引擎的友好度。 具体来说,CSS可以通过以下方式来优化网页对搜索引擎友好: 分离HTML和CSS代码,使得搜索引擎更容易读取和理解网页内容。 使用CSS控制网页布局和…

    css 2023年6月9日
    00
  • css实现文章分割线样式的多种方法总结

    CSS实现文章分割线样式的多种方法总结 在文章内容中,为了更好地梳理结构,通常会加入分割线。为了把分割线做得更加生动且独特,我们可以使用CSS来实现不同样式的分割线。本文将详细介绍实现CSS分割线样式的多种方法。 1. 使用border实现基础分割线 CSS的border属性可以实现一个基础的分割线,只需设置对应的边框样式、颜色和宽度即可。 .separat…

    css 2023年6月10日
    00
  • CSS预处理器scss/sass语法及使用教程

    CSS预处理器scss/sass语法及使用教程 CSS预处理是现代前端开发中常用的一种方式,它可以提高代码复用性和可维护性。有很多种CSS预处理器,其中比较流行的是scss或sass。本文将详细讲解scss和sass的语法和使用教程。 什么是scss/sass语法 scss和sass是两种流行的CSS预处理器,它们允许使用类似编程语言的语法来编写CSS代码。…

    css 2023年6月9日
    00
  • CSS3 特效范例整理

    CSS3 特效范例整理 简介 CSS3 是前端开发中非常重要的一部分,它提供了很多强大的功能,使得网页设计更加丰富多彩。在这篇文章中,我们将整理 CSS3 的一些实用特效范例,帮助大家更好地了解,使用 CSS3 来优化网页设计。 目录 CSS3 边框特效 CSS3 渐变特效 CSS3 动画特效 CSS3 边框特效 CSS3 提供了一些非常有用的边框特效。以下…

    css 2023年6月9日
    00
  • 在Ruby on Rails中使用AJAX的教程

    “在Ruby on Rails中使用AJAX的教程”的完整攻略如下: 1. AJAX的概述 AJAX是Asynchronous JavaScript and XML的缩写,意为异步JavaScript和XML。它是一种在Web应用程序中进行异步操作的技术,可以在Web页面无需重新加载的情况下向服务器发送请求并接收响应。在Ruby on Rails中,我们可以…

    css 2023年6月10日
    00
  • CSS使用技巧20则

    让我们来详细讲解“CSS使用技巧20则”的完整攻略吧。 CSS使用技巧20则 1. 了解CSS选择器的优先级规则 在多个CSS样式规则中,当发生冲突时,浏览器要判断哪个样式规则应该优先应用。这时就需要了解CSS选择器的优先级规则了。 CSS选择器的优先级从高到低分别是: !important声明(高于任何其他声明) 内联样式声明 ID选择器 类选择器、属性选…

    css 2023年6月9日
    00
  • 一个简单的收缩菜单效果

    收缩菜单是一种常见的网页UI设计效果,可以在有限的空间内呈现更多的内容,增强网站的可读性和交互性。下面是一个简单的收缩菜单效果的完整攻略。 步骤一:准备HTML和CSS代码 首先,我们需要准备一个基本的HTML结构,包括一个固定宽度的顶部导航栏和一个带有列表内容的主体区域。代码如下: <!DOCTYPE html> <html> &l…

    css 2023年6月11日
    00
  • 网页制作中注意应用HTML标签的问题

    当你在进行网页制作时,HTML标签的使用是非常重要的。以下是一些注意事项,以及应用HTML标签的方法和示例。 一、HTML标签使用注意事项 标签必须小写,不允许大写; 标签必须有开始标签和结束标签,除特殊情况外不得单标签闭合; 标签必须合法嵌套,即嵌套关系必须正确,不能互相穿插; 标签必须包容性好,即可以嵌套HTML标准规定的所有标签,除特定情况外不能出现标…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部