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. 【maven插件】maven-shade-plugin

    概述 该插件提供了将artifact打包到一个本地jar包的能力,包括其依赖关系以及一些参数如 shade -rename重命名依赖关系的包. 目标 shade:shade 绑定到建生命周期中的pac ...

  2. 关于python中的pickle函数

    8-7参考阅读 - 读文件.写文件.异常处理.文件保存游戏.pickle数据转成文本的过程又被称为"序列化",即将对象状态转换为可保持或传输的格式的过程.对应的,从序列化的格式中解 ...

  3. dets

    模块说明 提供基于文件的项式存储,项式以元组表示,其中某个位置为键,默认第1位置 Dets为Mniesia所用,后者增加了事务.查询.和分布式支持. Dets文件不能超过2GB. Dets只有set ...

  4. 实现mysql在windows server 2008下自动备份

    环境:MySQL   安装位置:D:\MySQL论坛数据库名称为:Db_Test数据库备份目的地:D:\db_bak\ 1.首先新建一个bat文件 rem ********************** ...

  5. 搭建git远程服务器三步骤

    以前都是使用git,这次由于工作需要,需要自己搭建一个远程git服务器.根据网上的 介绍,捣鼓了一下午,终于把远程git服务器搞定了,这里,做个总结. 搭建git远程服务,首先要安装git和ssh,以 ...

  6. Linux基础命令讲解(一)

    Linux命令基本格式: 命令 [参数] [路径文件] 方括号内容可省略 查看命令帮助手段: 1 man 命令名(man 还可以获取配置文件,函数的帮助) 2 命令 --help 3 help 命令( ...

  7. Database 2 Day DBA guide_Chapter2

    website:http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/11g/r2/2day_dba/install/install ...

  8. Java简单知识梳理

    1. Java是单根继承结构:每个类都继承于Object类 ,这也就保证了每个对象都具备某些功能 2. Java类权限关键字: public -> protected -> default ...

  9. Go 单例模式[个人翻译]

    原文地址:http://marcio.io/2015/07/singleton-pattern-in-go/ 最近几年go语言的增长速度非常惊人,吸引着各界人士切换到Go语言.最近有很多关于使用Rub ...

  10. Spring装配Bean之XML装配bean

    在Spring刚出现的时候,XML是描述配置的主要方式,在Spring的名义下,我们创建了无数行XML代码.在一定程度上,Spring成为了XML的同义词. 现在随着强大的自动化配置和Java代码的配 ...