当前位置: 首页 > news >正文

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. 页面代码

  // 鼠标右击事件,显示右击的相关菜单数据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'; //显示下面的divmenu.style.left = (e.pageX - 250) + 'px';  // 可以减去一些像素,比如10menu.style.top = (e.pageY - 180) + 'px';  // 减去10像素setContextMessage(record); //这个是设置点击的这一项的所有值document.addEventListener('click', hideContextMenu); //监听};const handleMenuItemClick = (option: string) => {alert(option); // 处理菜单项点击hideContextMenu(); // 点击后隐藏菜单//后续操作.........};<ProTablerowKey='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代码

#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;
}

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

http://www.lryc.cn/news/484485.html

相关文章:

  • Unity类银河战士恶魔城学习总结(P128 Switch UI with KeyBoard用键盘切换UI)
  • 基于Springboot+微信小程序的急救常识学习系统 (含源码数据库)
  • 【云计算解决方案面试整理】3-7主流云计算平台、云计算架构、安全防护
  • 数据库范式、MySQL 架构、算法与树的深入解析
  • 设计模式之责任链模式(Chain Of Responsibility)
  • SQLite 全文检索:快速高效的文本查询方案
  • 【微信小程序】报修管理
  • C++——视频问题总结
  • Ubuntu24.04 network:0 unclaimed wireless adapter no found
  • Java 使用MyBatis-Plus数据操作关键字冲突报错You have an error in your SQL syntax问题
  • 深入浅出 ChatGPT 底层原理:Transformer
  • opc da 服务器数据 转 IEC61850项目案例
  • SystemVerilog学习笔记(十一):接口
  • 华大单片机跑历程IO口被写保护怎么解决
  • Iotop使用
  • 定积分的快速计算技巧
  • 第T7周:Tensorflow实现咖啡豆识别
  • imagehash图片去重:保留图片文件名
  • 在Docker环境下为Nginx配置HTTPS
  • vue面试题9|[2024-11-15]
  • 大数据技术在金融风控中的应用
  • 安装一键式重置密码插件(Linux)-CloudResetPwdAgent
  • 如何平滑切换Containerd数据目录
  • 月影和米家大路灯哪个好?书客、月影、米家谁会更胜一筹!
  • instanceof 的模式匹配(二)
  • 【Spring】Bean的作用域和Spring的执行流程
  • 自动驾驶系列—从数据采集到存储:解密自动驾驶传感器数据采集盒子的关键技术
  • QtWebServer
  • 网络基础概念与应用:深入理解计算机网络
  • <el-select> :remote-method用法