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时,鼠标就会失去控制。

解决:iframe { pointer-events:none; }  (但是iframe的点击,滚动等事件会消失)

Ant Design -- 图片可拖拽效果,图片跟随鼠标移动的更多相关文章

  1. js实现本地图片文件拖拽效果

    如何拖拽图片到指定位置,具体方法如下 在从本地上传图片的时候,如果使用拖拽效果,想想应该是更加的高大上,下面直接上js代码 完整代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  2. MWeb 1.4 新功能介绍一:引入文件夹到 MWeb 中管理,支持 Octpress、Jekyll 等静态博客拖拽插入图片和实时预览

    之前在 MWeb 中打开非文档库中的 Markdown 文档,如果文档中有引用到本机图片,是没办法在 MWeb 中显示出来和预览的.这是因为 Apple 规定在 Mac App Store(MAS) ...

  3. vue组件实现图片的拖拽和缩放

    vue实现一个组件其实很简单但是要写出一个好的可复用的组件那就需要多学习和钻研一下,一个好的组件必须有其必不可少的有优点:一是能提高应用开发效率.测试性.复用性等:二是组件应该是高内聚.低耦合的:三是 ...

  4. 超强的纯 CSS 鼠标点击拖拽效果

    背景 鼠标拖拽元素移动,算是一个稍微有点点复杂的交互. 而在本文,我们就将打破常规,向大家介绍一种超强的仅仅使用纯 CSS 就能够实现的鼠标点击拖拽效果. 在之前的这篇文章中 -- 不可思议的纯 CS ...

  5. 原生js实现拖拽效果

    面向对象 + 原生js拖拽 拖拽div等盒子模型,都是日常操作没有什么问题,如果是拖拽图片的话,会有一点小坑要踩...... 那么我们看代码: var Move_fn = {}; (function( ...

  6. jQuery的DOM操作实例(2)——拖拽效果&&拓展插件

    一.原生JavaScript编写拖拽效果 二.jQuery编写的拖拽效果 三.在jQuery中拓展一个拖拽插件

  7. React.js实现原生js拖拽效果及思考

    一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...

  8. js拖拽效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. WinForm支持拖拽效果

    有一个MSDN客户提问在WinForm中如何实现拖拽效果——比如在WinForm中有一个Button,我要实现的效果是拖拽这个Button到目标位置后生成一个该控件的副本. 其实这个操作主要分成三步走 ...

随机推荐

  1. sql数据库相关语句

    易错点 Where需要放在from语句之后:where中不能出现聚合函数(就是能够将几行一列合并为一行一列的函数,比如max,min,avg,count()):但是可以出现其他,如比较符,getdat ...

  2. 前端面试题-CSS选择器

    一.CSS选择器作用 CSS 选择器用于定位我们想要给予样式的 HTML 元素,但不只是在 CSS 中,JavaScript 对 CSS 的选择器也是支持的,比如 document.document. ...

  3. MySort的实现

    代码: package week12; import java.util.*; import java.lang.Integer; public class MySort{ public static ...

  4. RAC_单实例_DG 关于两端创建表空间数据文件路径不一致的问题注意点

    RAC_单实例_DG 关于两端创建表空间数据文件路径不一致的问题注意点 主库SYS@orcl1>show parameter db_file_name_convert NAME TYPE VAL ...

  5. 浅谈移动端设备标识码:DeviceID、IMEI、IDFA、UDID和UUID -费元星

    在公司做数据分析的时候,发现NA端有很多ID,所有来系统的理解一下,有问题大家多指出   [心路历程] 最近刚好在思考工作中统计数据所用的标识码产生的数据误差到底有多大,借此机会几番搜索资料+请教大神 ...

  6. String对象的常见方法

    String 对象方法 方法 描述 anchor() 创建 HTML 锚. big() 用大号字体显示字符串. blink() 显示闪动字符串. bold() 使用粗体显示字符串. charAt() ...

  7. 关于在DBGridEh的一个字段使用checkbox的方法 .

    在DBGridEh的columns中新增加一个字段 1.如果你选择的数据库字段,则选择checkbox为true,并在keylist中输入0和1,就可以了 2.如果你选择的是一个临时字段,在数据集中新 ...

  8. 【MM系列】SAP MM模块-如何修改物料的移动平均价

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-如何修改物料的移动 ...

  9. 【MM系列】SAP 交货单屏幕增强

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 交货单屏幕增强   前言部分 ...

  10. Django-DRF组件学习-视图学习

    1.请求与响应 drf除了在数据序列化部分简写代码以外,还在视图中提供了简写操作.所以在django原有的django.views.View类基础上,drf封装了多个子类出来提供给我们使用. Djan ...