react项目实现拖拽
发布日期:2022-03-08 21:50:43
浏览次数:3
分类:技术文章
本文共 1719 字,大约阅读时间需要 5 分钟。
react项目实现拖拽
第一版直接拖拽div不会触发onMouseUp方法,从而导致鼠标松开后div仍会跟着鼠标移动,而且拖动过程中也伴随禁止图标。
因为拖动会触发H5原生的拖拽事件,不会监听到onmouseup。 试了很多方法终于解决了以上问题,贴上优化后的源码供参考//constructor内 constructor(props) { super(props); this.loadedSDK = false; this.moving = false; this.lastX = null; this.lastY = null; window.onmouseup = e => this.onMouseUp(e); window.onmousemove = e => this.onMouseMove(e); }//方法 onMouseDown=(e)=> { e.preventDefault();//解决了拖动时会出现禁止标志 e.stopPropagation(); this.moving = true; } onMouseUp=(e)=> { e.preventDefault();//解决了拖动时会出现禁止标志 this.moving = false; this.lastX = null; this.lastY = null; } onMouseMove=(e)=> { e.stopPropagation(); this.moving && this.onMove(e); } onMove=(e)=> { if(this.lastX && this.lastY) { //计算边缘限制x与y的最大值,并限制,默认在最右下角位置(0,0)。 const selfWidth=this.containerLegend.clientWidth; const selfHeight=this.containerLegend.clientHeight; const limitWidth=this.container.clientWidth-selfWidth-15; const limitHeight=this.container.clientHeight-selfHeight-25; const finalX=-1*this.state.translateX>limitWidth?-1*limitWidth:this.state.translateX; const finalY=-1*this.state.translateY>limitHeight?-1*limitHeight:this.state.translateY; let dx = e.clientX - this.lastX; let dy = e.clientY - this.lastY; this.setState({ translateX: (finalX + dx)>0?0:finalX + dx, translateY: (finalY + dy)>0?0:finalY + dy }) } this.lastX = e.clientX; this.lastY = e.clientY; }//render里{ this.containerLegend = r;}} onMouseDown={ e => this.onMouseDown(e)} style={ { transform: `translateX(${ this.state.translateX}px)translateY(${ this.state.translateY}px)`}}>
转载地址:https://blog.csdn.net/m0_55588706/article/details/121123240 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月09日 00时37分57秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【C++】算法集锦(10)通俗讲kmp算法
2019-04-27
【C++】算法集锦(12):高楼扔鸡蛋
2019-04-27
【图解】拥塞控制
2019-04-27
线程上下文切换
2019-04-27
什么是服务熔断?
2019-04-27
服务器压力过大?CPU打满?我来帮你快速检查Linux服务器性能
2019-04-27
C++面经总结之《Effective C++》(一)
2019-04-27
C++面经总结之《Effective C++》(二)
2019-04-27
这是什么“虎狼之词”啊!!!程序员的健康问题,看一线老中医怎么说!!!
2019-04-27
打开我的收藏夹 -- Python数据分析杂谈
2019-04-27
linux shell — 6.初识 EXT2 文件系统
2019-04-27
python - 【用户、商品】【购买、浏览】数据处理
2019-04-27
python - sql + pandas 与 sqlite 结合
2019-04-27
python - 使用sql 分析(06 - 15)国内各省GDP
2019-04-27
python - 抓取汇率数据分析美元和欧元对RMB的变化曲线
2019-04-27
python 数据科学 - 【回归分析】 ☞ 线性回归(2)
2019-04-27
设计模式——工厂模式
2019-04-27
Unity中实现有限状态机FSM
2019-04-27
Unity中实现反弹
2019-04-27
U3D游戏开发框架(九)——事件序列
2019-04-27