转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/31413767

本来准备写一个支持多图片拖拽上传的例子,但是为了更好的理解,先介绍一下HTML5的拖放。

拖放(Drag 和 drop)是 HTML5 标准的组成部分。

浏览器支持

Internet Explorer 9、Firefox、Opera 12、Chrome 以及 Safari 5 支持拖放。

被拖元素,dragElement :

1、添加事件:ondragstart

2、添加属性:dragable

放置元素,dropElement:

1、添加事件:ondargenter , ondragover , ondragleave , ondragend ,ondrop

和mouser划入划出一类的事件很类似,字面也很好理解,不赘述了,下面会用例子来说明。

1、页面上元素间的拖放

下面用个小例子,div间的拖放来展示,各个事件如何被触发:

<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8"/> <style type="text/css"> #dropEle
div
{
float: left;
} </style> <script src="../../jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> /**
* 拖放(Drag 和 drop)是 HTML5 标准的组成部分。
* 浏览器支持
*Internet Explorer 9、Firefox、Opera 12、Chrome 以及 Safari 5 支持拖放。
*/
$(function ()
{
$("#dragEle")[0].ondragstart = function (event)
{
console.log("dragStart");
event.dataTransfer.setData("Text", event.target.id);
}; /**
* 当放置被拖数据时,会发生 drop 事件。
* 调用 preventDefault() 来避免浏览器对数据的默认处理(drop 事件的默认行为是以链接形式打开)
* @param event
*/
$("#dropEle")[0].ondrop = function (event)
{
/* for (var p in event.dataTransfer)
{
console.log(p + " = " + event.dataTransfer[p] + " @@");
}
*/
console.log("onDrop");
var id = event.dataTransfer.getData("Text");
$(this).append($("#" + id).clone().text($(this).find("div").length));
event.preventDefault();
}; /**
* ondragover 事件规定在何处放置被拖动的数据。
*默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。
*/
$("#dropEle")[0].ondragover = function (event)
{
console.log("onDrop over");
event.preventDefault();
} $("#dropEle")[0].ondragenter = function (event)
{
console.log("onDrop enter");
} $("#dropEle")[0].ondragleave = function (event)
{
console.log("onDrop leave");
} $("#dropEle")[0].ondragend = function (event)
{
console.log("onDrop end");
} }); </script> </head>
<body> <div style="border: 1px solid red ; width: 100px ; height: 100px ;text-align: center;line-height: 100px;"
draggable="true" id="dragEle" > </div> <div style="width: 330px;min-height: 202px;border: 1px solid #444;margin-top: 20px;overflow-y: scroll;"
id="dropEle"></div> </body>
</html>

效果图:

效果图注意看下console面板的输出:观察每个事件何时被触发。

需要注意几点:

a、ondragover中必须组织事件的默认行为,默认地,无法将数据/元素放置到其他元素中。

b、drop 事件的默认行为是以链接形式打开,所以也需要阻止其默认行为。

还有可能注意到:在拖放时,event中包含一个event.dataTransfer 对象,上例中我们使用了该对象的setData方法传递了拖动div的id,然后在drop中取得该id,并且复制了该元素添加到放置的div中。

下面介绍下该对象的其他方法:

event.dataTransfer :

items = [object DataTransferItemList] @@drag_drop.html:44
files = [object FileList] @@drag_drop.html:44
types = text/plain @@drag_drop.html:44
effectAllowed = all @@drag_drop.html:44
dropEffect = none @@drag_drop.html:44
clearData = function clearData() { [native code] } @@drag_drop.html:44
getData = function getData() { [native code] } @@drag_drop.html:44
setData = function setData() { [native code] } @@drag_drop.html:44
setDragImage = function setDragImage() { [native code] } @@

我使用了js打印出了它所有的属性:

1、getData,setData上例已经使用了,clearData就是清除设置的数据。

2、值得注意的是files,当把操作系统中选择的一个或多个文件拖入该div中,files中会存储拖入文件的信息,然后我们通过file可以得到文件的类型,长度,内容然后实现上传。

3、setDragImage(image, x, y)用于设置鼠标移动过程中随鼠标一起移动的效果图。必须在dragstart中设置。

4、types,effectAllowed和dropEffect分别是拖入元素的类型,拖拽过程中鼠标显示的样式,我觉得可以忽略了这几个属性,一般用不到。

版权声明:本文为博主原创文章,未经博主允许不得转载。

HTML5 CSS3 专题 : 拖放 (Drag and Drop)的更多相关文章

  1. HTML5 CSS3 专题 :诱人的实例 3D旋转木马效果相册

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/32964301 首先说明一下创意的出处:http://www.zhangxinxu ...

  2. HTML5 CSS3 专题 :诱人的实例 3D旋转木马效果相冊

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/32964301 首先说明一下创意的出处:http://www.zhangxinxu ...

  3. HTML5 之拖放(drag与drop)

    拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. HTML5 拖放实例 ...

  4. HTML5(四)Drag and Drop

    HTML5 拖放(Drag 和 Drop) 拖放 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 设置元素为可拖放 首先,为了使元素 ...

  5. HTML5 CSS3专题 诱人的实例 CSS3打造百度贴吧的3D翻牌效果

    首先感谢w3cfuns的老师~ 今天给大家带来一个CSS3制作的翻牌效果,就是鼠标移到元素上,感觉可以看到元素背后的信息.大家如果制作考验记忆力的连连看.扑克类的游戏神马的,甚至给女朋友写一些话语,放 ...

  6. 拖放(Drag和Drop)--html5

    拖放,就是抓取一个对象后拖放到另一个位置.很常用的一个功能,在还没有html5的时候,我们实现这个功能,通常会用大量的js代码,再利用mousemove,mouseup等鼠标事件来实现,总的来说比较麻 ...

  7. HTML5 拖放---drag和drop

    拖放四步走:第一步:设置元素可拖放,即把 draggable属性设置为 true:  例:<div id="div" draggable="true"&g ...

  8. HTML5拖拽/拖放(drag & drop)详解

    H5中拖拽属性: draggable: auto | true | false   拖动事件:   - dragstart 在元素开始被拖动时触发 - dragend 在拖动操作完成时触发 - dra ...

  9. HTML 5 拖放(Drag 和drop)

    浏览器支持 Internet Explorer 9.Firefox.Opera 12.Chrome 以及 Safari 5. 1.把标签 draggable 属性设置为 true. 2.向标签添加on ...

随机推荐

  1. PS 滤镜——素描算法(一)

    这个算法结合高斯滤波和图层混合中的颜色减淡模式实现. 可以参考相关博客: http://blog.csdn.net/wsfdl/article/details/7610634 本文增加了一点调色,使得 ...

  2. javascript简单介绍

    ECMAScript 1.语法 2.变量:只能使用var定义,如果在函数的内容使用var定义,那么它是一个局部变量,如果没有使用var它是一个全局的.弱类型! 3.数据类型:原始数据类型(undefi ...

  3. $("li")是对象类型不是数组类型

  4. IT轮子系列(一)——DropDownList 的绑定(二)

    补记: 今天在阅读公司项目代码的时候,发现MVC中的dropdownlist已经封装了数据绑定方式.相对于第一篇文章,这样的方式更简便.简洁.现记录如下: 首先,创建我们的数据模型 如下图: 模型代码 ...

  5. 修改was数据源

    本机的RAD运行的工程可以通过修改jpa中的persistence中的jni修改数据源: 对于通过was控制台部署的ear需要在was控制台:资源--jdbc 修改数据源

  6. Axis创建webservice客户端和服务端

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui0317/ ...

  7. 老马Repository模式原文

    A system with a complex domain model often benefits from a layer, such as the one provided by Data M ...

  8. Day5_协程函数_面向过程

    def func(count): while True: yield count count +=1 #这是一个生成器,需要利用next()来执行. func(10) #yield: #1.把函数的执 ...

  9. SSH框架组建时碰到的一些问题

    以前用spring+hibernate的框架解决后台事务,这一次重新组建框架,计划引入Struts,如果方便的话,可能会进一步引入Freemarker.以下记下配置中的一些问题及解决,以供他人参考. ...

  10. java集合及其方法

    1.集合框架 我们已经学习过使用数组来批量存储某一类数据: 但是,数组还是存在一些不足,比如长度不可变(建立对象的时候就已经定义好长度): 查找某一个数据时,要依靠索引值来遍历数组进行条件查找,数据量 ...