Ant Design -- 图片可拖拽效果,图片跟随鼠标移动
Ant Design 图片可拖拽效果,图片跟随鼠标移动,需计算鼠标在图片中与图片左上角的X轴的距离和鼠标在图片中与图片左上角的Y轴的距离。
constructor(props) {
super(props);
this.dragDrop = false; // 图片是否被拖动中
this.apartX = ; // 鼠标在图片中与图片左上角的X轴的距离
this.apartY = ; //鼠标在图片中与图片左上角的Y轴的距离
this.state = {
previewVisible: false,
previewImage: ''
}
}
//图片点击查看
handlePreview = (url) => {
this.setState({
previewImage: url,
previewVisible: true,
});
};
// 关闭图片预览
closeImgIcon = () => {
this.setState({
previewVisible: false
});
}
// 图片跟随鼠标移动
_qxmouseMove = (event) => {
this.dragDrop = false;
}
_mouseDown = (event) => {
this.dragDrop = true;
const imgWrap = this.refs.showPreviewImageWrap;
this.apartX = event.pageX - imgWrap.offsetLeft;// 鼠标在图片中与图片左上角的X轴的距离
this.apartY = event.pageY - imgWrap.offsetTop; event.preventDefault();
event.stopPropagation();
}
_mouseUp = (event) => {
this.dragDrop = false; event.preventDefault();
event.stopPropagation();
}
_mouseMove = (event) => {
if (!this.dragDrop) {
return;
} const imgWrap = this.refs.showPreviewImageWrap;
imgWrap.style.left = (event.pageX - this.apartX)+ 'px';
imgWrap.style.top = (event.pageY - this.apartY) + 'px'; event.preventDefault();
event.stopPropagation();
}
//图片后缀判断
imgSuffix = (url) => {
let suffix = url.substring(url.length - );
return suffix
};
{this.state.previewVisible &&
<div className="ant-modal-wrap" onMouseMove={this._qxmouseMove.bind(this)}>
<div className='show_picture_image_wrap'
onMouseUp={this._mouseUp.bind(this)}
onMouseDown={this._mouseDown.bind(this)}
onMouseMove={this._mouseMove.bind(this)}
ref="showPreviewImageWrap" >
<Icon className="close-imgIcon" type="close-circle" onClick={() => this.closeImgIcon()}/>
{
(previewImage.indexOf('.pdf') > ) ?
<iframe src={previewImage} frameBorder=""
style={{width: '100%', height: '800px'}}></iframe> :
<img alt="example" style={{width: '100%'}} src={previewImage}/>
}
</div>
</div>
}
在div叫 ant-modal-wrap 增加onMouseMove 设置this.dragDrop=false;即鼠标离开需要拖拽的盒子,则取消拖拽事件。
用onMouseMove做拖拽时要注意iframe,在鼠标经过iframe时,鼠标就会失去控制。
Ant Design -- 图片可拖拽效果,图片跟随鼠标移动的更多相关文章
- js实现本地图片文件拖拽效果
如何拖拽图片到指定位置,具体方法如下 在从本地上传图片的时候,如果使用拖拽效果,想想应该是更加的高大上,下面直接上js代码 完整代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- MWeb 1.4 新功能介绍一:引入文件夹到 MWeb 中管理,支持 Octpress、Jekyll 等静态博客拖拽插入图片和实时预览
之前在 MWeb 中打开非文档库中的 Markdown 文档,如果文档中有引用到本机图片,是没办法在 MWeb 中显示出来和预览的.这是因为 Apple 规定在 Mac App Store(MAS) ...
- vue组件实现图片的拖拽和缩放
vue实现一个组件其实很简单但是要写出一个好的可复用的组件那就需要多学习和钻研一下,一个好的组件必须有其必不可少的有优点:一是能提高应用开发效率.测试性.复用性等:二是组件应该是高内聚.低耦合的:三是 ...
- 超强的纯 CSS 鼠标点击拖拽效果
背景 鼠标拖拽元素移动,算是一个稍微有点点复杂的交互. 而在本文,我们就将打破常规,向大家介绍一种超强的仅仅使用纯 CSS 就能够实现的鼠标点击拖拽效果. 在之前的这篇文章中 -- 不可思议的纯 CS ...
- 原生js实现拖拽效果
面向对象 + 原生js拖拽 拖拽div等盒子模型,都是日常操作没有什么问题,如果是拖拽图片的话,会有一点小坑要踩...... 那么我们看代码: var Move_fn = {}; (function( ...
- jQuery的DOM操作实例(2)——拖拽效果&&拓展插件
一.原生JavaScript编写拖拽效果 二.jQuery编写的拖拽效果 三.在jQuery中拓展一个拖拽插件
- React.js实现原生js拖拽效果及思考
一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...
- js拖拽效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- WinForm支持拖拽效果
有一个MSDN客户提问在WinForm中如何实现拖拽效果——比如在WinForm中有一个Button,我要实现的效果是拖拽这个Button到目标位置后生成一个该控件的副本. 其实这个操作主要分成三步走 ...
随机推荐
- Vuex入门(转)
参考:https://segmentfault.com/a/1190000015782272 https://www.cnblogs.com/y896926473/p/6709733.html 如果你 ...
- 6.并发编程--volatile
并发编程--volatile volatile-说明 volatile关键字的作用是变量在多个线程可见: volatile 关键字是非原子性的 要是实现原子性操作,建议使用atomic类的系列对象:支 ...
- Electron-Vue工程初始化,以及需要掌握的相关知识
1.安装nodejs 下载地址:http://nodejs.cn/ 需要重启系统 2.安装electron npm install electron -g 3.安装vue npm install vu ...
- pyhton2与pyhton3切换
ubuntu中默认的Python版本是Python2.X,但是现在Python的最新版本是Python3.X. 那么怎么修改ubutun系统默认的Python解释器呢? 如果没有安装,则使用以下命令安 ...
- 3、Shiro授权
Shiro授权过程和认证过程相似: 项目结构: package com.shiro.shiroframe; import org.apache.shiro.SecurityUtils; import ...
- 前端必须掌握的 docker 技能(2)
概述 作为一个前端,我觉得必须要学会使用 docker 干下面几件事: 部署前端应用 部署 nginx 给部署的 nginx 加上 https 使用 docker compose 进行部署 给 ngi ...
- WPF中的WndProc
其实,在WPF中,要想利用WndProc来处理所有的事件,需要利用到SourceInitialized Event,首先需要创建一个HwndSource对象,然后利用其AddHook方法来将所有的w ...
- 转]@SuppressWarnings 详解
转自:http://gladto.iteye.com/blog/728634 背景知识: 从JDK5开始提供名为Annotation(注释)的功能,它被定义为JSR-175规范.注释是以 ...
- 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_4 Mybatis中使用Dao实现类的执行过程分析-查询方法
delete方法没有并SqlSession的delete方法,而是调用的Upadte方法. 在测试类这里加断点. 实际的方法体内也加断点 运行测试方法,选择debug的方式 走到断点这里.会看到fac ...
- apicloud 运费计算js+页面
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...