如何给页面添加追加右键菜单(原右键菜单功能保持不变)

要给页面添加自定义的右键菜单,同时保留浏览器默认的右键菜单功能,你需要使用 JavaScript 监听 contextmenu 事件,并阻止其默认行为,然后显示你自定义的菜单。以下是一个示例:

<!DOCTYPE html>
<html>
<head>
<title>Custom Context Menu</title>
<style>
  #custom-menu {
    position: absolute;
    display: none;
    background-color: #f9f9f9;
    border: 1px solid #ccc;
    box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2);
    padding: 5px;
  }

  #custom-menu li {
    list-style: none;
    padding: 5px 10px;
    cursor: pointer;
  }

  #custom-menu li:hover {
    background-color: #eee;
  }
</style>
</head>
<body>

<div id="custom-menu">
  <ul>
    <li id="option1">Option 1</li>
    <li id="option2">Option 2</li>
    <li id="option3">Option 3</li>
  </ul>
</div>

<script>
  const customMenu = document.getElementById('custom-menu');
  const option1 = document.getElementById('option1');
  const option2 = document.getElementById('option2');
  const option3 = document.getElementById('option3');

  document.addEventListener('contextmenu', (event) => {
    event.preventDefault(); // 阻止默认右键菜单

    customMenu.style.display = 'block';
    customMenu.style.left = event.pageX + 'px';
    customMenu.style.top = event.pageY + 'px';
  });

  // 点击页面其他地方隐藏自定义菜单
  document.addEventListener('click', (event) => {
    if (event.target !== customMenu && !customMenu.contains(event.target)) {
      customMenu.style.display = 'none';
    }
  });

  // 自定义菜单选项的点击事件
  option1.addEventListener('click', () => {
    alert('Option 1 clicked!');
    customMenu.style.display = 'none'; // 点击后隐藏菜单
  });

  option2.addEventListener('click', () => {
    alert('Option 2 clicked!');
    customMenu.style.display = 'none';
  });

  option3.addEventListener('click', () => {
    alert('Option 3 clicked!');
    customMenu.style.display = 'none';
  });
</script>

</body>
</html>

代码解释:

  1. HTML 结构: 创建一个隐藏的 <div> 作为自定义菜单,包含 <ul><li> 元素表示菜单项。

  2. CSS 样式: 设置自定义菜单的样式,包括定位、背景、边框等。

  3. JavaScript 逻辑:

    • contextmenu 事件监听: 监听整个文档的 contextmenu 事件 (右键点击)。
    • event.preventDefault(): 阻止浏览器默认的右键菜单行为。
    • 显示自定义菜单: 设置自定义菜单的 display 属性为 block,并根据鼠标点击位置设置其 lefttop 属性,使其显示在正确的位置。
    • 点击其他地方隐藏菜单: 监听 click 事件,如果点击的目标不是自定义菜单或其子元素,则隐藏自定义菜单。
    • 菜单项点击事件: 为每个菜单项添加 click 事件监听,执行相应的操作,并在点击后隐藏菜单。

关键点:

  • event.preventDefault() 是阻止浏览器默认右键菜单的关键。
  • 注意处理自定义菜单的显示和隐藏逻辑,确保用户体验良好。
  • 可以根据需要自定义菜单的样式和功能。

这个例子提供了一个基本的框架,你可以根据自己的需求修改和扩展,例如:

  • 动态生成菜单项
  • 根据不同的上下文显示不同的菜单
  • 添加更丰富的菜单功能,例如复制、粘贴等

希望这个例子能帮助你!

posted @   王铁柱6  阅读(87)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示