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

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'; //显示下面的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代码

#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.kler.cn/a/391420.html

相关文章:

  • 【Go】Go Gin框架初识(一)
  • HTML拖拽功能(纯html5+JS实现)
  • 如何在 CentOS 中生成 CSR
  • FFmpeg开发笔记(七)欧拉系统编译安装FFmpeg
  • 【汇编】x86汇编编程寄存器资源心中有数
  • 【Redis】初识Redis
  • 了解外呼系统线路分类,提升业务效率
  • Django框架:Form组件及参数
  • ubuntu 22.04 镜像源更换
  • 51单片机使用NRF24L01进行2.4G无线通信
  • 系统架构设计师论文:大数据Lambda架构
  • 【JAVA基础】JVM双亲委派
  • Redis 内存突增时,如何定量分析其内存使用情况
  • Python OpenCV孤立点检测
  • Ansible内置模块之known_hosts
  • aws申请ssl证书的方法【该证书仅供aws】
  • etcd之etcd集群实践(六)
  • RocketMQ发送消息之事务消息
  • Python字符串格式化与数字处理指南
  • Python 连接 Redis 进行增删改查(CRUD)操作
  • 【微服务设计】从理论到实践:2PC(两阶段提交)与SAGA的全面比较与示例
  • Rust 建造者模式
  • IEC60870-5-104 协议源码架构详细分析
  • Mysql学习笔记(一):Mysql的架构
  • 单片机工程使用链接优化-flto找不到定义_链接静态库
  • 如何解决“无法在 ‘HTMLElement‘ 上设置 ‘innerText‘ 属性”的问题