拖放:
拖放是一种常见的特性,即抓取对象以后拖到另一个位置。HTML5中,拖放是标准的一部分,任何元素都能够拖放。
浏览器支持:
IE 9以上、Firefox、Opera、Chrome以及Safari 12支持拖放
拖放组成部分:
分为两部分 拖拽drag 和 释放 drop
拖拽drag指的是鼠标点击源对象后一直移动对象不松手,一但松手即释放了
源对象:指的是我们鼠标点击的一个事物,这里可以是一张图片,一个DIV,一段文本等等
目标对象:指的是我们拖动源对象后移动到一块区域,源对象可以进入这个区域,可以在这个区域上方悬停(未松手),可以释松手释放将源对象放置此处(已松手),也可以悬停后离开该区域。
拖放API
设置元素为可拖放
元素的draggable属性设置为true
被拖动的源对象可以触发的事件:
(1) ondragstart:源对象开始被拖动
(2) ondrag:源对象被拖动过程中(鼠标可能在移动也可能未移动)
(3) ondragend:源对象被拖动结束
拖动源对象可以进入到上方的目标对象可以触发的事件:
(1) ondragenter:目标对象被源对象拖动着进入
(2) ondragover:目标对象被源对象拖动着悬停在上方
(3) ondragleave:源对象拖动着离开了目标对象
(4) ondrop:源对象拖动着在目标对象上方释放/松手
1. HTML5为所有的拖动相关事件提供了一个新的属性dataTransfer :
e.dataTransfer { } //数据传递对象
功能:用于在源对象和目标对象的事件间传递数据
2. 源对象上的事件处理中保存数据:
e.dataTransfer.setData( k, v ); //k-v必须都是string类型
3. 目标对象上的事件处理中读取数据:
var v = e.dataTransfer.getData( k );
示例一:
实现一个可以随着鼠标拖动而移动的小飞机
提示:飞机需要绝对定位!ondrag事件中获取鼠标的坐标值!!!
随着鼠标拖动而移动的小飞机
示例二:
模拟电脑中 ”垃圾桶“的效果, 总共显示三个小飞机,拖动着某个小飞机到垃圾桶上方后,小飞机从DOM树上删除
提示:删除需要从DOM子节点中删除元素,需要阻止ondragover的默认行为!!利用源对象和目标对象的数据传递记录小飞机的ID值!!!
重要信息:
ondragover有一个默认行为!!!那就是当ondragover触发时,ondrop会失效!!!!这个可能是浏览器的版本问题,需要以后浏览器不断更新可能才会解决!!
如何阻止?
οndragοver= function(e){ //源对象在悬停在目标对象上时
e.preventDefault(); //阻止默认行为,使得drop可以触发
.....
}
οndrοp= function(e){ //源对象松手释放在了目标对象中
.....
}
拖动飞机到垃圾桶后从DOM树中删除子元素
面试题:
如何在网页中显示客户端(电脑)的一张图片?
如何拖动客户端的图片或者文件在网页显示在服务器端下载的页面中?
这两个问题是什么意思呢?
我们平时在电脑中拖拽一张图片到浏览器中实现的下载操作!!!按照H5之前的标准,要实现直接拖拽一张图片到浏览器中显示是无法完成!!但是自从H5新特性出来之后增加了拖拽API的特性,完美的实现了这一功能!!!
应用场合:
在某网站上,上传图片当做是头像
上传相片...
HTML5新增的文件操作对象:
File: 代表一个文件对象
FileList: 代表一个文件列表对象,类数组
FileReader:用于从文件中读取数据
FileWriter:用于向文件中写出数据
相关函数:
div.ondrop = function(e){
var f = e.dataTransfer.files[0]; //找到拖放的文件
var fr = new FileReader(); //创建文件读取器
fr.readAsURLData(f); //读取文件内容
fr.onload = function(){ //读取完成
img.src = fr.result; //使用读取到的数据
}
}
拖放API的扩展知识
请拖动您的照片到下方方框区域