drag事件( dragstart -- drag -- dragend )

 
当按下鼠标开始drag一个可以拖动的对象时,触发dragstart事件,如果元素是不可拖动的话,会出现一个不可拖动的图标,圆环里面一条斜杠
 
dragstart事件触发以后,当你拖动元素,就会持续触发drag事件,直到你放开才触发dragend事件
 
放下(dragenter -- dragover -- dragleave/drop)
当拖动的元素进入一个有效的drop区域,就会马上触发dragenter事件,当拖着元素在有效drop区域内移动时,会一直触发dragover事件,如果最后把元素拖出去了那就触发dragleave,如果最后把元素放下了那就触发drop事件。
 
定制drop目标区域
所有元素可以设置为drop目标,默认是不允许drop的,只要禁止dragenter和dragover事件默认行为就可以设置该元素为drop target区域
<div id="target"></div>
var droptarget = document.getElementById(“droptarget”);
EventUtil.addHandler(target, “dragover”, function(event){
    EventUtil.preventDefault(event);
});
EventUtil.addHandler(target, “dragenter”, function(event){
    EventUtil.preventDefault(event);
});
 
Firefox3.5+的默认行为是转到被拖动元素的URL,就是如果拖动一张图片,那么结构就是转到转到图片URL去。需要禁止掉drop事件的默认行为:
EventUtil.addHandler(droptarget, “drop”, function(event){
     EventUtil.preventDefault(event);
});
 
传输数据(dataTransfer对象):
当你开始drag的时候,数据就会被保存到dataTransfer里,例如拖动一段文字,那么就会调用setData方法把文字以text格式保存下来,拖动图片则会以URL的格式保存数据。
event.dataTransfer.setData(“text”, “some text”);                           //working with text
var text = event.dataTransfer.getData(“text”);

event.dataTransfer.setData(“URL”, “http://www.wrox.com/”);          //working with a URL(image)
var url = event.dataTransfer.getData(“URL”);

这是ie开始允许两种类型,后来HTML5扩展了,允许所有MIME类型,dataTransfer的数据只有在drop事件里才能拿到,如果不拿该对象就会销毁
(兼容性:
var dataTransfer = event.dataTransfer;
var url = dataTransfer.getData(“url”) ||dataTransfer.getData(“text/uri-list”);    //直到ie10都不支持拓展名,所以把URL放前面,后面text/uri-list是支持Firefox
var text = dataTransfer.getData(“Text”);
 
dataTransfer可以控制对被拖动元素和drop目标采取怎样的行动:
对于drop目标元素设置dragenter事件,对event.dataTransfer.dropEffect设定值,可以改变拖进去时鼠标上的图标而已:
“none”— A dragged item cannot be dropped here. This is the default value for everything except text boxes.
“move”— The dragged item should be moved to the drop target.
“copy”— The dragged item should be copied to the drop target.
“link”— Indicates that the drop target will navigate to the dragged item (but only if it is a URL).
同时需要在dragstart配合设置  event.dataTransfer.effectAllowed,该属性规定了对于被拖动的元素哪个drop效果是允许的:
“uninitialized”— No action has been set for the dragged item.
“none”— No action is allowed on the dragged item.
“copy”— Only dropEffect “copy”is allowed.
“link”— Only dropEffect “link”is allowed.
“move”— Only dropEffect “move”is allowed.
“copyLink”— dropEffect “copy”and “link”are allowed.
“copyMove”— dropEffect “copy”and “move”are allowed.
“linkMove”— dropEffect “link”and “move”are allowed.
“all”— All dropEffectvalues are allowed.
 
dataTransfer对象还有一些方法:
clearData(format)  用来清除掉特定格式的数据
setDragImage(element, x, y)     定制拖动时鼠标下的图标
 
设置元素可drag:
默认图片,连接,文字是可drag的,HTML5提供了一个draggable属性
<!-- turn off dragging for this image -->
<img src=”smile.gif” draggable=”false” alt=”Smiley face”>
<!-- turn on dragging for this element -->
<div draggable=”true”>...</div>
(兼容性:Internet Explorer 9 and earlier allow you to make any element draggable by calling the dragDrop()method on it during the mousedownevent. Safari 4 and earlier required the addition of a CSS style –khtml-user-drag: elementto make an element draggable.)

原生 drag drop HTML5的更多相关文章

  1. [转]人人网首页拖拽上传详解(HTML5 Drag&Drop、FileReader API、formdata)

    人人网首页拖拽上传详解(HTML5 Drag&Drop.FileReader API.formdata) 2011年12月11日 | 彬Go 上一篇:给力的 Google HTML5 训练营( ...

  2. Android drag drop

    最近偶尔知道了锤子的one step,所以在网上看相关的东西,有人说android原生drag drop就能实现,我就去学习一下这个drag drop,下面把学习到的东西总结一下: drag drop ...

  3. HTML5魔法堂:全面理解Drag & Drop API

    一.前言    在HTML4的时代,各前端工程师为了实现拖拽功能可说是煞费苦心,初听HTML5的DnD API觉得那些痛苦的日子将一去不复返,但事实又是怎样的呢?下面我们一起来看看DnD API的真面 ...

  4. atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结

    atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结 1. DND的操作流程 1 2. Html5 注 ...

  5. HTML5 drag & drop & H5 DnD

    HTML5 drag & drop H5 DnD https://html5demos.com/ demos https://html5demos.com/dnd-upload https:/ ...

  6. HTML5中的拖拽与拖放(drag&&drop)

    1.drag 当拖动某个元素时,将会依次触发下列事件: 1)dragstart:按下鼠标键并开始移动鼠标时,会触发该事件 2)drag:dragstart触发后,随即便触发drag事件,而且在元素被拖 ...

  7. HTML 学习笔记 (drag & drop)

    拖放(Drag & Drop)是一种常见的特性,即抓取对象以后拖到另一个位置.在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放.过去,我们用监听鼠标的Mousedown.Mouseo ...

  8. JS魔法堂:IE5~9的Drag&Drop API

    一.前言     < HTML5魔法堂:全面理解Drag & Drop API>中提到从IE5开始已经支持DnD API,但IE5~9与HTML5的API有所不同,下面我们来了解一 ...

  9. Drag & Drop and File Reader

    参考 : http://www.html5rocks.com/zh/tutorials/file/dndfiles/ http://blog.csdn.net/rnzuozuo/article/det ...

随机推荐

  1. eclipse导入源码

    1.window-----preferences 2.java---installed jres(点击不用展开)---选中使用的jar包-----editor 3.选中rt.jar ------sou ...

  2. spring-mvc List及数组的配置接收

    数组接收 前台传递数组id 后台接收方式: public WebReturnObject deleteBatch(@RequestParam("id[]") String[] id ...

  3. Spring Boot Document Part II(下)

    Part II. Getting started 11. 开发第一个Spirng Boot Application使用Spring Boot的关键特征开发一个基于JAVA Web的“Hello Wor ...

  4. 考了3年,工作四年,零基础在职终于拿到CFA证书

    大家都知道CFA Charterholder是独有的全球公认的投资管理从业人员高职业水平和道德水准的有力证明,是金融界卓越专业成就的象征:CFA资格强调和遵循极其严格的职业操守和道德准则,世界各主要发 ...

  5. Linux修改hostname的几种方法

    修改hostname有几种方式 1:  hostname DB-Server                            --运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改 ...

  6. PHP 两张图片合成一张图片(加水印)

    $dst_im = 'http://www.wangshangyou.com/content/uploadfile/201312/b3241386050881.png'; $src_im = 'htt ...

  7. 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root

    打开服务器系统c盘,打开window, 右键temp 属性 安全 编辑 添加IIS_IUSRS 用户控制权限添加修改和写入权限即可.这是Windows Server 2008 R2 标准版 SP1 6 ...

  8. git 忽略文件夹

    $ vim .gitignore 添加要忽略的文件或文件夹 esc + :wq 退出vim命令行

  9. python下selenium测试报告整合

    使用过一段时间的Robot Framework测试框架,测试之前需要先搭环境,需要安装的东西很多,这一点个人有些排斥. 每一个测试内容对应一个Test_Case,Robot有自己语法格式,如判断.循环 ...

  10. ASP.NET没有魔法——ASP.NET MVC 与数据库之EntityFramework配置与连接字符串

    前几篇文章中介绍了如何使用Entity Framework来操作数据库,但是对EF的配置.连接字符串的指定仍然存在一些疑问. 本章将对EF的配置进行介绍. EF可以通过两种方式来实现配置,分别是代码方 ...