javaScript drag对象进行拖拽使用详解

摘要:
目录拖动简介兼容性拖动事件拖动进程数据传输对象拖动桌面文件拖动实例摘要拖动简介>支持本地拖放的HMTL5的实现有多兼容?![]( https://img2018.cnblogs.com/blog/958602/201902/958602-20190218193204596-1803532108.png)桌面支持很好,但移动支持很差
目录

drag简介

> HMTL5提供的支持原生拖拽的实现

兼容性如何?

![](https://img2018.cnblogs.com/blog/958602/201902/958602-20190218193204596-1803532108.png)

桌面端的支持比较好,移动端的支持还是比较差

拖拽流程

1.设置可拖拽目标.设置属性draggable="true"实现元素的可拖拽(文本、图片和链接是默认可以拖放的,它们的draggable属性自动被设置成了true。) 2.监听dragstart,通过DataTransfer设置拖拽数据 3.为拖拽操作设置反馈图标(可选) 4.设置允许的拖放效果,如copy,move,link 5.设置拖放目标,默认情况下浏览器阻止所有的拖放操作,所以需要监听dragenter或者dragover取消浏览器默认行为使元素可拖放. 6.监听drop事件执行所需操作

drag事件

dragstart:在元素开始被拖动时候触发 drag:在元素被拖动时反复触发(可以在此处节流) dragend:在拖动操作完成时触发 dragenter:当被拖动元素进入目的地元素所占据的屏幕空间时触发 dragover:当被拖动元素在目的地元素内时触发 dragleave 当被拖动元素没有放下就离开目的地元素时触发

DataTransfer对象

> 在进行拖放操作时,DataTransfer 对象用来保存,通过拖放动作,拖动到浏览器的数据。它可以保存一项或多项数据、一种或者多种数据类型。

e.dataTransfer.files

包含一个在数据传输上所有可用的本地文件列表。如果拖动操作不涉及拖动文件,此属性是一个空列表。

e.dataTransfer.types

保存一个被存储数据的类型列表作为第一项,顺序与被添加数据的顺序一致。

DataTransfer-MDN

从操作系统拖拽图片到指定区域进行预览

> 从操作系统拖拽文件到浏览器中.不会触发dragstart,dragend,只需取消拖放区域的默认行为,设置反馈,并在拖放发生时取消浏览器默认行为,通过e.dataTransfer.files获取文件信息进行操作
<div id="demo2">
  <h3>从文件夹中拖拽图片到下面的区域进行预览</h3>
  <ul class="preview"></ul>
  <style>
  #demo2 {
    margin: 20px;
  }
  #demo2 .preview {
    height: 300px;
    background: #ddd;
  }
  #demo2 li {
    float: left;
    margin-left: 40px;
  }
  #demo2 img {
    max-height: 150px;
     auto;
  }
  </style>

  <script>
  (function (w) {
    var doc = w.document;

    var dnd = {
      init: function () {
        var me = this;
        var preview = doc.querySelector('#demo2 .preview');

        preview.addEventListener('dragover', function (e) {
          e.preventDefault();
        }, false);

        preview.addEventListener('drop', function (e) {
          // 操作系统拖放文件到浏览器需要取消默认行为
          e.preventDefault();
            
          [].forEach.call(e.dataTransfer.files, function (file) {
            if (file && file.type.match('image.*')) {
              var reader = new FileReader();

              reader.onload = function (e) {
                var img = doc.createElement('img');
                img.src = e.target.result;
                var li = doc.createElement('li');
                li.appendChild(img);
                preview.appendChild(li);
              };

              reader.readAsDataURL(file);
            }
          });
        }, false);
      }

    };

    dnd.init();
  }(window));
  </script>
</div> <!-- demo2 -->

drag实例

```
This div is draggable

<h2 id=08>小结</h2>
通过本章的学习,我们更深入的了解到如何使用drag进行拖放,并且通过dataTransfer获取拖放的相应数据。由于该对象的浏览器兼容还存在问题,所以在使用时务必查询的can i use,确保符合项目需求。否则可以选择 mouse事件进行拖拽处理

免责声明:文章转载自《javaScript drag对象进行拖拽使用详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇黑马程序员——JAVA学习笔记六(多线程)grafana监控下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

基于智能网卡(Smart Nic)的Open vSwitch卸载方案简介

SmartNic技术的初衷是以比普通CPU低得多的成本支持各种虚拟化功能,如sriov、overlay/decap和卸载一些vSwitch处理逻辑。目前,业界还没有完美的SmartNic解决方案来解决传统的vSwitch性能瓶颈,每种解决方案的实施方式也各不相同。没有统一的解决方案。图1.不同SmartNic架构的比较。2.基于SmartNic的OVS卸载方...

virtuoso数据库的安装方法

数据库虚拟师有两种安装和配置方法。第一种方法是默认情况下直接在系统中安装virtualoso,复制virtualoso的安装文件,然后默认情况下将其直接安装。使用命令行对virtualoso数据库进行操作。1将virtualoso opensource解压缩到指定目录。例如,c:virtualoso2安装VC++2012和VC++2010插件补丁3以设置环境...

kafka命令

启动kafka:./kafka-server-start.sh../config/server.properties&查看topic./kafka-topics.sh--zookeeper192.168.8.56:2181,192.168.8.70:2181,192.168.8.147:2181--describe--topicliuhangjun....

Matlab自定义函数的五种方法 [转]

子函数lfg2只能被主函数和主函数中的其他子函数调用。特点是,它是基于Matlab的数值运算内核的,所以它的运算速度较快,程序效率更高。...

应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC) 中的用户 NT AUTHORITYSYSTEM SID (S-1-5-18)授予针对 CLSID 为 {D63B10C5-BB46-4990-A94F-E40B9D520

此安全权限可以使用组件服务管理工具进行修改。根据APPID为{9CA88EE3-ACB7-47C8-AFC4-AB702511C276}在注册表中找到HKEY_CLASSES_ROOTAppID{9CA88EE3-ACB7-47c8-AFC4-AB702511C276}右键选择权限:加入SYSTEM用户并赋予完全控制权限:如果在注册表中没有权限添加用户,则需...

sql server 日志软件过大设置办法

在使用sqlserver的过程中,sql日志文件的大小将随着其增长而受到限制。1.找到相应的库--˃属性--˃恢复模式,并将其更改为简单模式。2.选择库--˃任务--˃收缩--˃文件。3.选择日志文件收缩或数据库文件收缩。删除命令后占用的空间将在此处释放。数据库ldf文件的占用空间将更改为设置的空间大小。...