相关文章推荐
<div class= "url" id= "url" > <a href= "http://weiqinl.com" target= "_blank" > 我是url:http://weiqinl.com </a> <img class= "img" id= "tupian1" src= "img1.png" alt= "图片1" /> <img class= "img" id= "tupian2" src= "img2.png" alt= "图片2" /> <div id= 'target' class= "dropabled target" > Drop Here </div> <script> var dragSrc = document . getElementById ( ' txt ' ) var target = document . getElementById ( ' target ' ) dragSrc . ondragstart = handle_start dragSrc . ondrag = handle_drag dragSrc . ondragend = handle_end function handle_start ( e ) { console . log ( ' dragstart-在元素开始被拖动时候触发 ' ) function handle_drag () { console . log ( ' drag-在元素被拖动时候反复触发 ' ) function handle_end () { console . log ( ' dragend-在拖动操作完成时触发 ' ) target . ondragenter = handle_enter target . ondragover = handle_over target . ondragleave = handle_leave target . ondrop = handle_drop function handle_enter ( e ) { console . log ( ' handle_enter-当元素进入目的地时触发 ' ) // 阻止浏览器默认行为 e . preventDefault () function handle_over ( e ) { console . log ( ' handle_over-当元素在目的地时触发 ' ) // 阻止浏览器默认行为 e . preventDefault () function handle_leave ( e ) { console . log ( ' handle_leave-当元素离开目的地时触发 ' ) // 阻止浏览器默认行为 // e.preventDefault() function handle_drop ( e ) { console . log ( ' handle_drop-当元素在目的地放下时触发 ' ) var t = Date . now () target . innerHTML = '' target . append ( t + ' -拖放触发的事件。 ' ) e . preventDefault () </script> </body> </html>

在整个拖放过程中,我们以上说的是表面现象,事件过程内部还会发生什么事情呢?请看下面👇的DataTransfer对象。

DataTransfer对象

与拖放操作所触发的事件同时派发的对象是DragEvent,它派生于MouseEvent,具有Event与MouseEvent对象的所有功能,并增加了dataTransfer属性。

该属性用于保存拖放的数据和交互信息,返回DataTransfer对象。

// DataTransfer dataTransfer = DragEvent.dataTransferDataTransfer

对象定义的属性和方法有很多种,我们看下列入标准的几个。

types 只读属性。它返回一个我们在dragstart事件中设置的拖动数据格式的数组。 格式顺序与拖动操作中包含的数据顺序相同。IE10+、Edge、safari3.1、Firefox3.5+ 和Chrome4以上支持该属性 files 返回拖动操作中的文件列表。包含一个在数据传输上所有可用的本地文件列表。如果拖动操作不涉及拖动文件,此属性是一个空列表。 dropEffect 获取当前选定的拖放操作的类型或将操作设置为新类型。它应该始终设置成effectAllowed的可能值之一【none、move、copy、link】。dragover事件处理程序中针对放置目标来设置dropEffect。 effectAllowed 指定拖放操作所允许的效果。必须是其中之一【 none, copy, copyLink, copyMove, link, linkMove, move, all, uninitialized】默认为uninitialized 表示允许所有的效果。ondragstart处理程序中设置effectAllowed属性
//IE10及之前版本,不支持扩展的MIME类型名
//Firefox 5版本之前,不能正确的将url和text映射为text/uri-list 和text/plain
var dataTransfer = event.dataTransfer;
//读取文本,
var text = dataTransfer.getData("Text");
//读取URL,
var url = dataTransfer.getData("url") || dataTransfer.getData("text/uri-list");

浏览器支持程度说了这么多,如果浏览器不支持,也是白扯。

Method of easily dragging and dropping elements on a page, requiring minimal JavaScript.

要求最少的js,实现拖拽页面元素的简单方法

drag之浏览器支持程度–caniuse

原生HTML5拖拽API,drag && drop 在实际工作中,还是有很多情况下会遇到的。

以上,我只介绍了部分常用API。API不复杂,多看会儿,实践就知道了。

各个浏览器,可能会在表现上,稍有不同,但我相信大家还是会向着标准发展的。

https://developer.mozilla.org/zh-CN/docs/Web/API/DataTransfer

HTML5原生拖拽/拖放 Drag & Drop 详解

  • 拖放的流程对应的事件
  •  
    推荐文章