首页 > 其他分享 >react 自定义鼠标右键点击事件

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

时间:2024-06-18 18:04:05浏览次数:8  
标签:const 鼠标 自定义 react 点击 复制 右键 event

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

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

标签:const,鼠标,自定义,react,点击,复制,右键,event
From: https://blog.csdn.net/wang_59881/article/details/139778551

相关文章

  • 【踩坑】.NET 8.0 自定义IExceptionHandler不生效
    中间件实现异常处理在ASP.NETCore里,我们可以使用中间件(Middleware)实现全局的异常处理。如内置的异常处理中间件UseExceptionHandlerapp.UseExceptionHandler(appError=>{appError.Run(asynccontext=>{context.Resp......
  • 基于React和Ant Design的公用组件设计与封装
    在现代前端开发中,React与AntDesign(以下简称AntD)是开发企业级应用的常用组合。公用组件的设计与封装对于提高开发效率、减少重复代码以及提升应用的可维护性至关重要。本文将围绕设计原则、组件拆分颗粒度、以及如何在React和AntD项目中进行公用组件的封装展开探讨。一、设计原则......
  • Qt 应用程序中自定义鼠标光标
    在Qt应用程序中,你可以自定义鼠标光标。你可以使用`QCursor`类来设置不同类型的鼠标光标,比如内置样式或者自定义的图片。以下是一些使用示例:使用内置光标样式Qt提供了一些内置的光标样式,你可以使用这些样式来改变光标的外观,例如箭头、手形、等待图标等等。1#include<QA......
  • 20、docker-自定义网络
    查看所有的docker网络 网络模式:·bridge桥接(docker默认、自己定义也使用桥接模式)·none  不配置网络·host和宿主机共享网络·container容器网络连通(用的少) ================================================================......
  • ChatGPT讲React Fiber
    ReactFiber是React16引入的一个新的协调引擎(reconciliationengine),旨在提高React应用的性能和响应性。Fiber主要解决了React之前版本中的一些性能瓶颈,使得React能够更好地处理复杂和大型应用中的更新和渲染任务。什么是ReactFiberReactFiber是对React核心算法......
  • MVVM模式开发WinForm-ReactiveUI
    一、引言  谈到MVVM设计模式,首先让人想到的是WPF。没错,MVVM的概念是微软在2005年提出的,并首次将其应用到WPF中。最近非常火的Vue.js也是使用了MVVM的设计模式。MVVM设计模式的核心部分是DataBinding机制。顾名思义,其功能就是将Model的数据绑定到View层,并且将View层控件的变换绑......
  • React中AntDesign upload组件 自定义请求将多个上传请求合并成一个并
    接口文档核心代码constImportPictureUpload=()=>{const[fileList,setFileList]=useState([])constonBeforeUpload=(file:any,fileList:any)=>{setFileList(fileList)returnfalse;}useEffect(()=>{if(......
  • 解释一下这段代码 npm i --no-save --legacy-peer-deps react@17
    这段命令是用于在Node.js项目中安装React17版本的一个指定操作,具体各部分含义如下:npmi或npminstall:这是用于在Node.js项目中安装包的命令,会根据package.json文件中的dependencies或devDependencies安装所有依赖,如果没有指定特定包,则会安装所有列出的依赖。--no-save:这......
  • 由于 react native svg 图表的依赖性问题,无法在 expo 上构建我的应用程序
    我最近制作了一个应用程序,并尝试为TestFlight构建该应用程序。在我的应用程序中,我开始使用react-native-svg-charts它使用react-native-svg.这些是我的package.json中的版本:"react-native-svg":"^15.3.0"、"react-native-svg-charts":"^5.4.0"、"react-n......
  • React+TS前台项目实战(九)-- 全局常用组件弹窗Dialog封装
    文章目录前言Dialog公共弹窗组件1.功能分析2.代码+详细注释3.使用方式4.效果展示总结前言今天这篇主要讲全局公共弹窗Dialog组件封装,将用到上篇封装的模态框Modal组件。有时在前台项目中,偶尔要用到一两个常用的组件,如弹窗,其实不必非安装ant-design这些主流框......