ware_fz
用文字记录生活
一个关注技术与人文的IT博客
通过处理拖拽事件可以让用户通过拖拽的方式将文件拖拽到应用中
第一步是创建一个drop区域。虽然你网页内容的哪部分接受拖放取决于你的应用设计,但是使一个元素接收drop事件是很容易的。
1 2 3 4 5 6
| var dropbox;
dropbox = document.getElementById("dropbox"); dropbox.addEventListener("dragenter", dragenter, false); dropbox.addEventListener("dragover", dragover, false); dropbox.addEventListener("drop", drop, false);
|
在这个例子中,我们将ID为dropbox的元素变为了我们的drop区域。这个只需要给元素添加dragenter, dragover, 和drop 事件监听器就完成。
我们其实并不需要对dragenter and dragover 事件进行处理,所以这些函数都很简单。他们只需要包括禁止事件传播和阻止默认事件。
1 2 3 4 5 6 7 8 9
| function dragenter(e) { e.stopPropagation(); e.preventDefault(); }
function dragover(e) { e.stopPropagation(); e.preventDefault(); }
|
关键部分在drop()这个函数中
1 2 3 4 5 6 7 8 9
| function drop(e) { e.stopPropagation(); e.preventDefault();
var dt = e.dataTransfer; var files = dt.files;
handleFiles(files); }
|
这里,我们从事件中获取到了dataTransfer 这个域,然后从中得到文件列表,再将他们传递给handleFiles()函数。从这一点开始,处理文件的方法和用input元素或者用拖拽是一样的了。
dataTransfer
在进行拖放操作时,DataTransfer 对象用来保存,通过拖放动作,拖动到浏览器的数据。它可以保存一项或多项数据、一种或者多种数据类型。
拖放触发的拖放事件有一个dataTransfer属性,该属性值是一个DataTransfer对象,该对象包含如下属性和方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| dataTransfer.dropEffect:设置或返回拖放目标上允许发生的拖放行为。如果此设置的拖放行为不在effectAllowed属性设置的多种拖放行为之内,拖放操作将会失败。该属性值只允许none、copy、link、move值之一。
dataTransfer.effectAllowed:设置或返回被拖动元素允许发生的拖动行为。该属性值可设置为none、copy、copyLink、copyMove、link、linkMove、move、all、uninitialized。
dataTransfer.files:包含一个在数据传输上所有可用的本地文件列表。如果拖动操作不涉及拖动文件,此属性是一个空列表。此属性访问指定的FileList 中无效的索引将返回未定义(undefined)。
dataTransfer.types:types节保存一个被存储数据的类型列表作为第一项,顺序与被添加数据的顺序一致。如果没有添加数据将返回一个空列表。
dataTransfer.setDragImage(element x,y):设置拖放操作的自定义图标。其中element设置自定义图标,x设置图标与鼠标在水平方向的距离;y设置图标与鼠标在垂直方向的距离。
dataTransfer.addElement(element):添加自定义图标。
dataTransfer.getData(format):获取DataTransfer对象中设置format格式的数据。其中format代表数据格式,data代表数据。
dataTransfer.setData(type,data): 为一个给定的类型设置数据。如果该数据类型不存在,它将添加到的末尾,这样类型列表中的最后一个项目将是新的格式。如果已经存在的数据类型,替换相同的位置的现有数据。
dataTransfer.clearData([format]):清除DataTransfer对象中format格式的数据,如果省略format格式,则意味着清除DataTransfer对象中的全部数据。
|
参考
本文代表个人观点,内容仅供参考。若有不恰当之处,望不吝赐教!