react 自定义鼠标右键点击事件

功能:鼠标右键点击节点时,出现“复制”功能,点击其他部位,隐藏“复制”;鼠标右键事件的文案,始终在鼠标点击位置的右下方;点击复制,提示复制成功
效果图:在这里插入图片描述
代码:

const [showRight,setShowRight] = useState(false);
const contextMenu = useRef(null); 
const [clickX,setClickX] = useState('0px');
const [clickY,setClickY] = useState('0px');

------------

<div className='topology-node' onContextMenu={(e)=> handleRight(e)} >
	这里面是图中的节点,只有右键双击图中节点,才会触发自定义的右键事件功能
</div>

------------

// 鼠标右键展示的内容,注意这里的样式rightStyle,鼠标右键时菜单的位置(图中“复制”的位置)就是靠这个样式控制的
{showRight&&<div className='right-panel' onClick={handleRightCopy} style={rightStyle}>复制</div>}

------------

useEffect(()=>{
	// 监听其他地方的点击事件
    document.addEventListener('click', _handleClick);
})

------------

// 事件
const handleRight =(event:any) =>{
    setShowRight(true)
    // event.clientX event.clientY 鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标)
    setClickX(event.clientX);  
    setClickY(event.clientY);
}
// 右键菜单的位置,加减多少看自己,位置看着舒服就行
const rightStyle = {
    left:`${clickX + 5}px`,
    top: `${clickY + 5}px`
}
const _handleClick =(event:any)=>{
    const wasOutside = !(event.target.contains === contextMenu);
    // 点击其他位置需要隐藏右键菜单
    if (wasOutside) setShowRight(false);
}
const handleRightCopy =()=>{
    console.log('点击了复制');
    message.success('复制成功')
}

css

// 样式可以自定义
.right-panel{
  width: 100px;
  z-index:10;
  position: fixed;
  background-color: pink;
  cursor: pointer;
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 21:28:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 21:28:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 21:28:04       82 阅读
  4. Python语言-面向对象

    2024-06-18 21:28:04       91 阅读

热门阅读

  1. web前端开发哪个城市:探索最佳发展地

    2024-06-18 21:28:04       31 阅读
  2. Linux中的进程控制

    2024-06-18 21:28:04       35 阅读
  3. 高并发系统中面临的问题 及 解决方案

    2024-06-18 21:28:04       30 阅读
  4. Vue 3 的 setup 函数使用及避坑指南

    2024-06-18 21:28:04       31 阅读
  5. leetcode-11-二叉树前中后序遍历以及层次遍历

    2024-06-18 21:28:04       30 阅读
  6. API接口被刷 如何解决

    2024-06-18 21:28:04       25 阅读
  7. 机器学习中的神经网络入门

    2024-06-18 21:28:04       34 阅读
  8. C++中的访问者模式

    2024-06-18 21:28:04       28 阅读
  9. 双指针练习:和为s的两个数字

    2024-06-18 21:28:04       29 阅读
  10. CVPR2024 分割Segmentation相关论文37篇速览

    2024-06-18 21:28:04       22 阅读
  11. 2024年危化品生产经营单位考试试题。

    2024-06-18 21:28:04       33 阅读
  12. adb之ps命令用法

    2024-06-18 21:28:04       37 阅读
  13. vue3 配置全局@符号

    2024-06-18 21:28:04       22 阅读