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. Java之Integer类

    Integer类简介: Integer类是基本数据类型int的包装器类,是抽象类Number的子类,位于java.lang包中. Integer类在对象中包装了一个基本类型int的值,也就是每个Int ...

  2. 清理docker 容器下面的log

    1. docker info 找到docker root dir 2. go to /var/lib/docker 3. constainers 下面有每个容器的文件夹,-json.log 结尾的为L ...

  3. EDM杂谈:第一个屏幕的定义和特点

    在EDM营销中,经常会碰到第一个屏幕这个概念.这是什么意思呢?博主跟大家介绍一下. 图一:博文配图 这个主要是指用户在打开邮件时不需要滚动屏幕就可以看到的邮件内容.因为用户第一眼就可以看到,因此这部分 ...

  4. OpenStack Rally 质量评估与自动化测试利器

    目录 文章目录 目录 问题描述 Rally 简介 应用场景 应用案例 Rally 安装 Rally 使用 Rally 架构 Rally Plugin 分析与实现 程序入口 执行 rally task ...

  5. spring中的增强类型

    在spring中有两种增强方式:XML配置文件和注解配置.下面一次为大家讲解. 使用的是Aspectj第三方框架 纯POJO (在XML中配置节点) 使用@AspectJ,首先要保证所用的JDK 是5 ...

  6. 2018.03.28 python-pandas groupby使用

    groupby 分组统计 1.根据某些条件将数据分组 2.对每个组独立应用函数 3.将结果合并到一个数据结构中 Dataframe在行或列上分组,将一个函数应用到各个分组并产生一个新值,然后函数执行结 ...

  7. linux 安装 sudo

    1.安装sudo# apt-get install sudo2.修改 /etc/sudoers 文件属性为可写# chmod +w /etc/sudoers3.编辑 /etc/sudoers ,添加如 ...

  8. 什么是SLF,PSL,MLF,SLO?

    受国际经济金融形势不确定性增强以及各种影响流动性的因素波动较大影响,近年来我国银行体系短期流动性供求的波动性有所加大,尤其是当多个因素相互叠加或市场预期发生变化时,有可能出现市场短期资金供求缺口难以通 ...

  9. iframe根据子frame的高度自动高度

    <script type="text/javascript"> //光标移动到顶部 this.to_top=function(){ $("html,body& ...

  10. 应用安全 - 工具 | 数据库 - redis - 漏洞 - 汇总

    未授权访问 Date 类型 未授权访问导致getshell 影响范围 复现 (1)shell反弹 (2)结合SSH服务 (3)结合web服务 分析