HTML5之拖放Drag &Drop事件的介绍

拖放(Drag &Drop)是一种常见的特性,即抓取对象以后拖到另一个位置。在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放。过去,我们用监听鼠标的Mousedown、Mouseove、Mouseup等事件来不停地获取鼠标的坐标来修改元素的位置,而现在html5原生的Drag &Drop事件(DnD),方便了许多,而且性能也有了提高。
查看演示 下载源码
Internet Explorer 9+、Firefox、Opera 12、Chrome 以及 Safari 5 支持拖放。
如何使对象能够被拖动
为了使元素可拖动,把 draggable 属性设置为 true :

<div draggable="true">可拖动的div</div>

注意:在大多数浏览器中,a元素和img元素默认就是可以拖放的,但是为了保险起见,最好还是加上draggable属性。
拖动事件

dragstart:网页元素开始拖动时触发。
drag:被拖动的元素在拖动过程中持续触发。
dragenter:被拖动的元素进入目标元素时触发,应在目标元素监听该事件。
dragleave:被拖动的元素离开目标元素时触发,应在目标元素监听该事件。
dragover:被拖动元素停留在目标元素之中时持续触发,应在目标元素监听该事件。
drap:被拖动元素或从文件系统选中的文件,拖放落下时触发。
dragend:网页元素拖动结束时触发。
注意:以上这些事件都可以指定回调函数。
dataTransfer对象
拖动过程中,回调函数接受的事件参数,有一个dataTransfer属性。它指向一个对象,包含了与拖动相关的各种信息。
draggableElement.addEventListener('dragstart', function(event) {      
 event.dataTransfer.setData('text', 'Helloweba');
});
上面代码在拖动开始时,在dataTransfer对象上储存一条文本信息,内容为“Helloweba”。当拖放结束时,可以用getData方法取出这条信息。
dataTransfer对象的属性:
effectAllowed:指定所允许的操作,可能的值为copy、move、link、copyLink、copyMove、linkMove、all、none和uninitialized(默认值,等同于all,即允许一切操作)。
files:包含一个FileList对象,表示拖放所涉及的文件,主要用于处理从文件系统拖入浏览器的文件。
types:储存在DataTransfer对象的数据的类型。
dataTransfer对象的方法:
setData(format, data):在dataTransfer对象上储存数据。第一个参数format用来指定储存的数据类型,比如text、url、text/html等。
getData(format):从dataTransfer对象取出数据。
clearData(format):清除dataTransfer对象所储存的数据。如果指定了format参数,则只清除该格式的数据,否则清除所有数据。
setDragImage(imgElement, x, y):指定拖动过程中显示的图像。默认情况下,许多浏览器显示一个被拖动元素的半透明版本。参数imgElement必须是一个图像元素,而不是指向图像的路径,参数x和y表示图像相对于鼠标的位置。
dataTransfer对象允许在其上存储数据,这使得在被拖动元素与目标元素之间传送信息成为可能。
实例代码
在实例中,我们设置从一个盒子中将元素拖放到另一个盒子元素中。
HTML结构如下:
<ul id="drags">
 <li draggable="true">A</li>
 <li draggable="true">B</li>
 <li draggable="true">C</li>
</ul>
<ul id="drops"></ul>
#drags是被拖动的对象盒子,#drops是目标区域盒子。
javascript代码:
<script type="text/javascript">
//获取目标元素
var target = document.querySelector('#drops');
//获取需要拖放的元素
var dragElements = document.querySelectorAll('#drags li');
//临时记录被拖放的元素
var elementDragged = null;
//循环监听被拖放元素的开始拖放和结束拖放事件
for (var i = 0; i < dragElements.length; i++) {
 //开始拖放事件监听
 dragElements[i].addEventListener('dragstart', function(e) {
  //设置当前拖放元素的数据参数
  e.dataTransfer.setData('text', this.innerHTML);
  //保存当前拖放对象
  elementDragged = this;
 });
 //结束拖放事件监听
 dragElements[i].addEventListener('dragend', function(e) {
  //注销当前拖放对象
  elementDragged = null;
 });
}
//目标元素监听被拖放元素进入事件
target.addEventListener('dragover', function(e) {
 //阻止浏览器默认行为
 e.preventDefault();
 //设置鼠标样式
 e.dataTransfer.dropEffect = 'move';
 return false;
});
//目标元素监听当被拖放元素落下时刻事件
target.addEventListener('drop', function(e) {
 //阻止默认行为
 e.preventDefault();
 //阻止默认行为
 e.stopPropagation();
 //获取当前被拖放元素的存放数据参数
 var text = e.dataTransfer.getData('text');
 //建立元素
 var node=document.createElement("li");
 var textnode=document.createTextNode(text);
 node.appendChild(textnode);
 this.appendChild(node);

 //删除被拖放元素
 document.querySelector('#drags').removeChild(elementDragged);   
 return false;
});
</script>
注意我们要调用 preventDefault() 来避免浏览器对数据的默认处理(drop 事件的默认行为是以链接形式打开),此外,通过 dataTransfer.getData("Text") 方法获得被拖的数据。该方法将返回在 setData() 方法中设置为相同类型的任何数据。
最后结合File Api,可以获得本地拖放文件。FileReader专门用于读取文件,根据 W3C 的定义,FileReader 接口“提供一些读取文件的方法与一个包含读取结果的事件模型

时间: 2024-10-17 10:04:47

HTML5之拖放Drag &Drop事件的介绍的相关文章

HTML5中的drag拖拽功能介绍

拖放(Drag 和 drop)是 HTML5 标准的组成部分,本文主要介绍与拖拽操作相关的对象及事件信息. 要接受元素的放下,目标元素必须监听至少3个事件: 首先是dragenter事件,用来决定是否接受"拖动的元素"被放下,如果接受放下,那么该事件就被取消,进入下一个事件 然后开始dragover事件,用来确定给用户什么样的反馈,即位于该元素之上时呈现什么样的效果,如果该事件被取消,反馈一般是一个鼠标指针, 也可以使用dropEffect属性定义,如果事件没有被取消,那么就是默认的行

HTML5 拖放(Drag和drop)

在工作当中,我们会常常见到像UC浏览器的新选项卡一样的可以自定义拖拽摆放效果.大的像淘宝的装修,QQ空间装扮等,小到一些游戏等等随处可见拖放的使用场景. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 目前浏览器支持情况:Internet Explorer 9.Firefox.Opera 12.Chrome 以及 Safari 5 支持拖放.注释:在 Safari 5.1.2 中不支持拖放. 下面看看一个具体的字母拖放demo:

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

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

HTML5 Video标签的属性、方法和事件汇总介绍

 HTML5 Video标签的属性.方法和事件汇总介绍 前段时间写了一个基于html5 video的视频播放器,从起初的对其不了解,然后到能够写一个基本完善的自定义播放器.在这个过程中,对video标签的属性,方法,事件有了个全面的认识.下面分类列出来一下. <video>标签的属性 代码如下: src :视频的属性 poster:视频封面,没有播放时显示的图片 preload:预加载 autoplay:自动播放 loop:循环播放 controls:浏览器自带的控制条 width:视频宽度

HTML5 — 让拖放变的流行起来

在 HTML5 出现之前,页面元素的拖放需要监听 mousedown.mouseover 以及 mouseup 等一系列事件,然后改变元素的相对位置来实现这一效果.HTML DnD(Drag-and-Drop)API 的出现,使得拖放变的简单.但是由于 DnD 尚处在草案阶段,各浏览器对其规范并未统一,有些事件在不同浏览器中会出现不同效果. 要使用 DnD,需要明确两件事情,一是需要拖动的元素,二是可放置拖动元素的位置.拖放无非是将元素从一个位置拖到另一个位置. Drag 首先我们需要指定要拖动

HTML5的拖放 API使用详解

在HTML5之前,如果要实现拖放效果,一般会使用mousedown.mousemove和mouseup三个事件进行组合来模拟出拖拽效果,比较麻烦.而HTML5规范实现了原生拖放功能,使得元素拖放的实现更加方便和高效. 默认情况下,图像.链接和文本是可以拖动的.文本只有在被选中的情况下才能拖动,而图像和链接在任何时候都可以拖动. HTML5为所有的HTML元素规定了一个draggable属性,表示元素是否允许拖动.要想让其他元素也能被拖动,可以设置这个属性为true. 一. 实现拖放的步骤: 1.

JS魔法堂:IE5~9的Drag&amp;Drop API

一.前言      < HTML5魔法堂:全面理解Drag & Drop API>中提到从IE5开始已经支持DnD API,但IE5~9与HTML5的API有所不同,下面我们来了解一下吧!   二.IE5~9与HTML5的DnD API的不同点       1. IE5~9DnD API仅对 img元素 . a[href]元素 和 input[type=text]/textarea元素 中被选中的文字有效,且不用设置 draggable="true" ; 而HTML

HTML5读取拖放的本地文件的例子

在桌面上创建了自定义的放置目标后,可以从桌面上把文件拖放到该目标.与拖放一张图片或链接类似,从桌面上把文件拖放到浏览器中也会触发drop事件.而且可以在event.dataTransfer.files中读取到被放置的文件,此时它是一个File对象,与通过文件输入字段取得的File对象一样. 例子: <!DOCTYPE HTML> <html> <head>     <style type="text/css">         #drop

HTML5 Audio标签方法和函数API介绍

 问说网 > 文章教程 > 网页制作 > HTML5 Audio标签方法和函数API介绍 Audio APIHTML5HTML5 Audio预加载 HTML5 Audio标签方法和函数API介绍 问说网 • 2014-06-19 09:53:52 • 3561 浏览 文章目录 audio常用属性 audio音乐格式的支持 audio属性 参数说明 最近想弄一个类似在线播放MP3的应用,刚开始想用flash播放器,但是已经很就没有弄flash了,用起来很老火,于是想到了HTML5的audi