React中右击出现自定弹窗

前言

在react中点击右键,完成阻止浏览器的默认行为,完成自定义的悬浮框(Menu菜单).

版本

"react": "^18.2.0",

"@umijs/route-utils": "^4.0.1",

"antd": "^5.18.1",

"@ant-design/pro-components": "^2.4.4",

效果

代码

第一种方式(display属性block/none)

1. 页面代码

javascript 复制代码
  // 鼠标右击事件,显示右击的相关菜单数据
  const [contextMessage, setContextMessage] = useState(null);

  const hideContextMenu = () => {
    const menu: any = document.getElementById('context-menu');
    if (menu) {
      menu.style.display = 'none';
    }
  };

  const handleRowContextMenu = (record) => (e: React.MouseEvent) => {
    e.preventDefault(); //阻止默认行为
    const menu: any = document.getElementById('context-menu'); //获取元素
    menu.style.display = 'block'; //显示下面的div
    menu.style.left = (e.pageX - 250) + 'px';  // 可以减去一些像素,比如10
    menu.style.top = (e.pageY - 180) + 'px';  // 减去10像素
    setContextMessage(record); //这个是设置点击的这一项的所有值
    document.addEventListener('click', hideContextMenu); //监听
  };

  const handleMenuItemClick = (option: string) => {
    alert(option); // 处理菜单项点击
    hideContextMenu(); // 点击后隐藏菜单
    //后续操作.........
  };

<ProTable
     rowKey='workId'
     key='workList'
     onRow={(record, rowIndex) => {
        return { onContextMenu: handleRowContextMenu(record), // 添加右键事件 
         }
    }}/>
<div id="context-menu">
    <ul>
       <li onClick={() => handleMenuItemClick('新增同级')}>新增同级</li>
       <li onClick={() => handleMenuItemClick('新增子集')}>新增子集</li>
    </ul>
</div>

2.css代码

css 复制代码
#context-menu {
    display: none;
    position: absolute;
    border: 1px solid #ccc;
    background-color: white;
    box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2);
    z-index: 1000;
}
#context-menu ul {
    list-style-type: none;
    margin: 0;
    padding: 0;
}
#context-menu ul li {
    padding: 8px 12px;
    cursor: pointer;
}
#context-menu ul li:hover {
    background-color: #f0f0f0;
}

第二种方式(设置状态显示/隐藏)

相关推荐
C澒3 分钟前
微前端容器标准化 —— 公共能力篇:通用打印
前端·架构
德育处主任Pro12 分钟前
前端元素转图片,dom-to-image-more入门教程
前端·javascript·vue.js
木斯佳13 分钟前
前端八股文面经大全:小红书前端一二面OC(下)·(2026-03-17)·面经深度解析
前端·vue3·proxy·八股·响应式
陈天伟教授41 分钟前
人工智能应用- 预测新冠病毒传染性:04. 中国:强力措施遏制疫情
前端·人工智能·安全·xss·csrf
叫我一声阿雷吧1 小时前
JS 入门通关手册(23):JS 异步编程:回调函数与异步本质
javascript·es6·前端面试·回调函数·回调地狱·js异步编程·异步本质
zayzy1 小时前
前端八股总结
开发语言·前端·javascript
今天减肥吗1 小时前
前端面试题
开发语言·前端·javascript
Rabbit_QL1 小时前
【前端UI行话】前端 UI 术语速查表
前端·ui·状态模式
小码哥_常2 小时前
一文带你吃透Android BLE蓝牙开发全流程
前端
小码哥_常2 小时前
从“新老交锋”看Retrofit与Ktor
前端