HTML5草案中增加了Drag&Drop的支持,原来以为会比较方便的实现拖拽,但事实上还是很不成熟。
先看下drag&drop的W3C草案。
传统意义上的drag&drop行为实际上是由三个鼠标事件构成的:
- mousedown
- mousemove -- 在mousedonw的同时进行mousemove,开始拖拽
- mouseup -- 拖拽结束
通常我们只需要dragStart,drag,drop这三个事件就够了,如果需要在进入drop的区域有视觉效果变化,那么最多增加dragEnter,dragLeave这两个事件就可以了。
而在这个草案中却多定义了dragover和dragend这两个几乎没有用的事件,而且必须要实现dragover这个事件,非常的不好用,可以参看The HTML5 drag and drop disasterCross Browser drag drop。
事件
描述
dragstart |
绑定在拖拽对象上,当开始拖拽时触发 |
drag |
绑定在拖拽对象上,在拖拽时触发 |
dragend |
绑定在拖拽对象上,在拖拽结束时触发 |
dragenter |
绑定在可以drop的对象上,当拖拽进到此处时触发,只在进入这个对象时触发一次。 |
drageleave |
绑定在可以drop的对象上,当拖拽离开此处时触发,只在离开这个对象时触发一次。 |
dragover |
绑定在可以drop的对象上,当拖拽在此处时触发,不管鼠标是否移动都会多次触发。 |
drop |
绑定在可以drop的对象上,在允许drop的时候触发 |
数据传递#
HTML5定义了dataTransfer对象来传递拖拽的数据,可以通过setData()和getData()来操作dataTransfer中携带的数据。
拖拽效果(drag and drop Effects)#
主要是指拖拽的时候鼠标样式。
Method
Description
dataTransfer.effectAllowed |
设置被拖拽对象允许的操作,这个值可以是copy,move,link,copyMove,copyLink,linkMove,all,none |
dataTransfer.dropEffect |
设置drop对象上允许的操作,可以是copy,move,link |
设置html dom上需要拖拽元素的dragable属性为true, 以及对应的CSS属性。
HTML:
<div class="dragElement" >dafdf</div>
<a href="#" class="dragElement" draggable="true">Cat</a>
<div class="dragElement" ></div>
<div class="dragElement" draggable="true">Bird</div>
<div class="dropElement"></div>
CSS:
.dragElement{
width:150px;
height:50px;
background:red;
float:left;
margin:5px;
}
.dropElement{
width:350px;
height:350px;
background:green;
float:right;
}
/**对于Safari,还必须要在CSS中对能拖拽的元素设置-khtml-user-drag: element*/
*[draggable = true] {
-khtml-user-drag: element;
}
在js绑定相关的事件处理函数,这里使用了JQuery的bind。
JS代码:
var dragElements = $('.dragElement');
dragElements.bind('dragstart',function(e){
e.originalEvent.dataTransfer.effectAllowed = 'move';
e.originalEvent.dataTransfer.setData('Text',this.innerHTML);
});
var dropBox = $('.dropElement');
dropBox.bind('dragover',function(e){
//设置drop可以接受的行为,能不能drop由这里的设置决定,drop事件中不处理dropEffect
e.originalEvent.dataTransfer.dropEffect = 'move';
// 必须阻止默认事件,否则无法触发drop事件
if (e.preventDefault)
e.preventDefault();
});
dropBox.bind('dragenter',function(e){
alert('dragenter');
});
dropBox.bind('dragleave',function(e){
alert('drag leave');
});
dropBox.bind('drop',function(e){
alert('drop the data:'+e.originalEvent.dataTransfer.getData('Text'));
return false;
});
测试的浏览器:Firefox3.6, IE7+, Safari4, Chrome4+
运行点这里
HTML5的drag drop有不少浏览器兼容性的问题:
1.有的浏览器拖拽时候有阴影,有的则没有,见下图
2.在IE上只能拖拽<a>,<img>这两个标签(必须存在href属性)以及选中的文字,并且不需要设置dragable=true也可以拖拽(当然这也是W3C草案中的标准)。chrome, FF, Safari则可以拖拽设置dragable=true的任意元素。
3.IE的dataTransfer不能随便设置数据名称,只能设成"Text"或"URL",而其他浏览器则没有这个限制。
4.Safari中需要用CSS指定能被拖拽的元素。
5.拖拽时候的鼠标样式不一致。
- 大小: 38.5 KB
分享到:
相关推荐
HTML5是现代网页开发的重要标准,它引入了许多新特性,其中拖放(Drag and Drop)功能就是一项增强用户交互体验的重要接口。拖放接口允许用户通过鼠标或触控设备将元素从一个位置拖动到另一个位置,使得网页的互动性...
HTML5 Drag and Drop是Web开发中的一个重要特性,它允许用户通过简单的拖放操作在网页上移动元素,大大提升了用户体验。这个特性结合JavaScript可以创建出许多交互式的应用,比如文件上传、图片预览、数据交换等。...
本资料"DragandDrop.rar_dragAndDrop"聚焦于在Internet Explorer(IE)浏览器中实现文件拖放的扩展功能,为开发者提供了宝贵的指导。 文件拖放技术的核心在于HTML5中的Drag and Drop API,这是一个强大的功能,使得...
Vue DnD Mobile,全称为"Vue Drag and Drop Mobile",是专门为Vue.js开发的一个拖放库,专为移动设备优化,使得在触摸屏上的交互变得更加自然和流畅。 拖放(Drag and Drop,简称DnD)是一种常见的用户交互模式,...
综上所述,“Draganddrop.html”示例是一个关于如何利用HTML5的拖放API创建交互式Web应用的实践案例。通过阅读和分析源码,我们可以深入理解拖放功能的工作原理,以及如何将其应用于实际项目中。
Drag and Drop API是HTML5规范的一部分,它提供了一种在Web页面上实现拖拽功能的方法。通过这个API,开发者可以创建交互性强、用户友好的应用,如文件上传、内容重新排序等。本文将详细介绍Drag and Drop API的基本...
本篇文章将深入探讨如何使用jQuery实现拖放(Drag and Drop)功能,特别是针对图片的拖放操作。拖放功能是网页交互中常见的一种增强用户体验的方式,常用于文件上传、页面元素排序等场景。 首先,我们需要引入jQuery...
前端项目-angular-drag-and-drop-lists,Angular directives for sorting nested lists using the HTML5 Drag and Drop API
1. **HTML5 Drag and Drop API**: 这是实现拖放功能的基础,它允许开发者创建可拖动元素,并定义它们在何处可以被放置。HTML5中的`draggable`属性设置为`true`,即可使元素具有拖放功能。同时,通过监听`dragstart`...
"gwt 之dualListField (drag and drop)"是一个这样的实例,它实现了双列表框功能,并支持拖放操作。这个功能在很多场景下都非常实用,比如在用户需要进行项选择或分类时。 GWT的DualListField控件通常由两个并排的...
首先,我们需要了解HTML5中提供了拖放API(Drag and Drop API),使得在浏览器环境中实现拖放功能成为可能。这个API包括了`dragstart`、`drag`、`dragenter`、`dragleave`、`dragover`、`drop`等一系列事件,以及`...
在这个“Drag and Drop using Javascript.zip”压缩包中,可能包含了一个使用HTML5和JavaScript实现的拖放示例。 在JavaScript中,HTML5的拖放API提供了对拖放行为的支持,使得开发者能够轻松地创建具有拖放功能的...
HTML5引入了拖放API(Drag and Drop API),使得开发者可以轻松地创建拖放交互的用户界面。这个API允许元素被拖动,并可以放置到其他元素或特定的拖放区域内。通过`dragstart`、`drag`、`dragenter`、`dragleave`、`...
"DragAndDrop_Kanban-board"项目就是这样一个实例,它利用HTML5的拖放(Drag and Drop)功能创建了一个可自定义的看板系统,模仿了Kanban管理方法,让用户能够通过拖拽任务卡片来实现任务管理。接下来,我们将深入探讨...
link href =' bower_components/draganddrop/src/draganddrop.css ' rel =' stylesheet ' type =' text/css '/>< script src =' bower_components/jquery/dist/jquery.min.js ' type =' text/javascript ' &...
HTML5引入了Drag and Drop API,使得在浏览器中实现拖放操作变得简单。主要包括`draggable`属性、`ondragstart`、`ondragenter`、`ondragover`、`ondragleave`、`ondrop`等事件。 3. **实现步骤** - **设置可拖动...
在JavaScript的世界里,MooTools是一个轻量级且强大的库,它提供了许多实用的功能,包括对DOM操作、事件处理、动画效果以及高级功能如拖放(Drag & Drop)。本篇文章将详细探讨如何利用MooTools 1.2.1版本实现拖拽...
HTML5作为现代网页开发的标准,引入了许多新的特性和API,其中一项就是拖放(Drag and Drop)功能。这项技术允许用户通过鼠标或触控设备将元素在网页上自由移动,或者从一个元素拖放到另一个元素,极大地增强了用户...
标题 "Right Button Drag and Drop with Popup Menu(5KB)" 提示我们这个压缩包可能包含一个实现右键拖放功能并带有弹出菜单的程序或代码示例。这通常涉及到计算机图形用户界面(GUI)编程,特别是在Windows环境中。...