原生 drag drop HTML5

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.)

时间: 2024-10-21 09:08:35

原生 drag drop HTML5的相关文章

atitit.D&amp;D drag&amp;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 注解事件 document.dragover >>preventDefault 1 3. 代码(js) 1 4. C++ 实现拖曳 2 5. QT拖拽功能简介 - pcsuite的专栏 - 博客频道 - CSDN.NET.htm 2 1. DND的操作流程 Dragenter 事件::更改提示的颜色

HTML5魔法堂:全面理解Drag &amp; Drop API

一.前言    在HTML4的时代,各前端工程师为了实现拖拽功能可说是煞费苦心,初听HTML5的DnD API觉得那些痛苦的日子将一去不复返,但事实又是怎样的呢?下面我们一起来看看DnD API的真面目吧! 二.由于篇幅较长,特设目录一陀 三.HTML4下实现简单拖拽 四.HTML5下实现简单拖拽 五.如何启用DnD效果 六.draggable属性详解 七.DnD的生命周期 八.DnD中最重要的数据传递对象──DataTransfer对象 九.[object DataTransferItemLi

HTML 学习笔记 (drag &amp; drop)

拖放(Drag & Drop)是一种常见的特性,即抓取对象以后拖到另一个位置.在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放.过去,我们用监听鼠标的Mousedown.Mouseove.Mouseup等事件来不停地获取鼠标的坐标来修改元素的位置,而现在html5原生的Drag &Drop事件(DnD),方便了许多,而且性能也有了提高. 如何使对象能够被拖动 为了使元素能够被拖动 需把要拖动元素的draggable 属性设置为true. <img src="../

Drag &amp; Drop and File Reader

参考 : http://www.html5rocks.com/zh/tutorials/file/dndfiles/ http://blog.csdn.net/rnzuozuo/article/details/25295899 http://www.tutorialspoint.com/html5/html5_drag_drop.htm 本篇只作为个人参考 FIle Reader method abort()  停止读 readAsText(file,"utf-8") , 第2参数是指

Atitit。D&amp;D drag&amp;drop拖拽功能c#.net java swing的对比与实现总结

Atitit.D&D drag&drop拖拽功能c#.net java swing的对比与实现总结 1. 实现一个D&D操作一般包括三个步骤: 1 2. .net黑头的拖曳机制.必须有DragEnter事件(单独写DragDrop事件是不会具有拖拽功能的) 2 3. ---java黑头的拖曳..必须有DragEnter事件(单独写 Drop事件是不会具有拖拽功能的) 2 4. 代码 3 5. 参考 5 1. 实现一个D&D操作一般包括三个步骤: 首先实现一个拖拽源,这个拖拽

Draggabilly – 轻松实现拖放功能(Drag &amp; Drop)

Draggabilly 是一个很小的 JavaScript 库,专注于拖放功能.只需要简单的设置参数就可以在你的网站用添加拖放功能.兼容 IE8+ 浏览器,支持多点触摸.可以灵活绑定事件,支持 RequireJS 以及 Bower 安装. 您可能感兴趣的相关文章 创意无限!一组网页边栏过渡动画[附源码下载] 真是好东西!13种非常动感的页面加载动画效果 你见过吗?9款超炫的复选框(Checkbox)效果 超赞!基于 Bootstrap 的响应式的后台管理模板 太赞了!超炫的页面切换动画效果[附源

【Qt学习笔记】13.拖放技术:Drag & Drop

1.接受拖放 Drag & Drop 是一个界面操作,用于在两个窗口间传递数据. Drag Source: 拖放源窗口 Drag Target: 拖放目标窗口 拖放操作: 1.在源窗口:选中目标,按下鼠标,移动,拖至目标窗口(Drag) 2.在目标窗口:取消鼠标,到指定位置,松开鼠标(Drop) (按下ESC取消操作) MIME: MIME(Multipurpose Internet Mail Extensions)被传递的数据以MIME格式传送,它是多组type-data数据:(type0,

吓哭原生App的HTML5离线存储技术,却出乎意料的容易!【低调转载】

吓哭原生App的HTML5离线存储技术,却出乎意料的容易![WeX5低调转载] 2015-11-16 lakb248 起步软件 近几天,WeX5小编编跟部分移动应用从业人士聊了聊,很多已经准备好全面拥抱HTML5.但WeX5小编编也发现,依然有相当一部分从业者,仍然对HTML5将信将疑,仍对原生App技术恋恋不舍.小编编特意转发分享下文,HTML5技术崛起,从离线存储技术是可见一斑的. (正文)随着Web App的发展,越来越多的移动端App使用HTML5的方式来开发,除了一些Hybrid Ap

Drag Drop注册失败问题如何解决

Drag Drop注册失败的问题经常出现在开发项目的过程中,可能一开始运行的时候是好的,过了一段时间运行发现蹦出个这个问题. 现提供两种解决方案:1)在项目的program.cs中找到main函数,在main函数之前加上[STA Thread];2)如果你的线程是新开,则需要在你新开的线程启动之前加上这句代码:thread.SetApartmentState(ApartmentState.STA);