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. 写了一个迷你confirm弹窗插件,有取消和确认操作处理并支持单个确认使用弹窗和锁屏禁止滚动

    由于项目想精简不想用其他第三方的ui插件,又很需要像confirm等小效果来完善交互,且使用的频率也是相当的高,于是自己造了一个,省时也省力 代码已经粘贴出来,直接复制即可看到效果,高手勿喷,可以相互 ...

  2. WebApi实现原理解析笔记

    这是我看过WebApi实现代码后的一些总结,一方面加深自己的记忆,另外也希望能够帮助大家更深入的了解WebApi. 注:暂时没有好好的整理,可能有些晦涩难懂. Webapi 控制器类必须实现IHttp ...

  3. 修改Form ->Top和Left 造成的莫名其妙的显示异常 “轴信息”

    相关代码: 运行程序: 要等待很久,或者把主窗体最小化,再最大化打开"轴信息" 才会恢复正常. 这个"不爽"很蛋蛋 ,网友亲亲们,有独到见解的亲亲们,期待得到你 ...

  4. 安卓App提交应用商店时遇到的两个小问题

    陆陆续续做了一个半月左右的「喵呜天气」终于在今天下午成功提交到应用商店(腾讯应用宝).期间遇到两个小问题,记录如下: 1.上传安装包失败,提示「无法获取签名信息,请上传有效包(110506)」. 安装 ...

  5. JavaScript设计模式接口

    JavaScript中实现接口的方法有三种: 第一种,使用注释的方法实现接口 特点:(1)最简单,但是功能最弱(2)利用 interface和 implement"文字"(3)把他 ...

  6. SpringMVC加载.roperties文件属性值的方法?

    1.在xml文件中引入来获取属性值就不说了. 2.在controller层获取引用配置文件中的属性值: (1).编写工具类 @Configuration @PropertySource(value=& ...

  7. ora-01440:要减小精度或标度,则要修改的列必须为空

    --由于业务需求变更,需要对oracle数据库productinfo表的productPrcie结构进行修改.修改表结构,必须是在表空的情况下才可以修改表结构.具体操作步骤: --1.查看produc ...

  8. web项目jsp出现The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path错误

    原因是Javaweb工程类中没有添加Tomcat运行时相关类导致. 解决方式如下:出错的文件---->>build path---->>config build path--- ...

  9. akka tips

    1.actorSelection,当涉及actor远程通信时,可以使用actorSelection. context.actorSelection("akka.tcp://app@other ...

  10. 测试String.Format中的Format参数

    DateTime datetime = DateTime.Now; Console.WriteLine(String.Format("{0:d}", datetime)); // ...