html5的拖拽事件
原生拖放
一、若要一个元素可以被拖放,首先要为元素添加draggable属性
| true | 可以被拖放 |
| false | 不可以被拖放 |
| auto | 除img或url以外都可以被拖放 |
| 其他值 | 都不可以被拖放 |
注释:在火狐中设置draggable属性无用,但可以再dragstart事件中为dataTransfer对象中添加setData()方法后就可以允许被拖拽。支持draggable的属性的浏览器有IE10+、Firefox 4+、Safari 5+,chrome,Opera 11.5+.
二、拖拽发生过程
被拖拽元素
| dragstart | 按下鼠标键并开始移动鼠标时 |
| drag |
在dragstart事件之后,在元素被拖动期间会持续触发该事件 |
| dragend | 当拖动停止时,会触发dragend事件 |
放置目标元素
| dragenter | 有元素被拖动到放置目标上 |
| dragover |
紧随dragenter发生,在被拖动的元素 还在放置目标范围内移动时,会持续触发该事件 |
| dragleave | 在元素被拖出放置目标时触发 |
| drop | 元素被放到了放置目标中触发 |
注释:拖拽发生过程:dragstart->drag->dragenter->dragover->dragleave/drop->dragend
三、自定义放置目标
原因:所有元素默认是不允许放置的,尽管都支持放置目标事件,当拖放元素经过不允许放置的元素时,就会看到一种特殊光标(圆环中有一条反斜线)。
解决方法:把任何元素都变成有效的放置目标,重写dragenter和dragover事件的默认行为.如
function prevent(e){
var e = e || window.event;
e.preventDefault(e);
}
droptarget.dragover = prevent;
droptarget.dragenter = prevent;
此时特殊光标会变成允许放置的光标。
注释:firfox 3.5+中,放置事件的默认行为是打开被放到放置目标上的url,为支持FireFox支持正常的拖放,还要取消drop事件的默认行为,阻止它打开URL.
四、dataTransfer对象
IE5引入了dataTransfer对象,它是事件对象的一个属性,用于从被拖动元素向放置目标传递字符串格式的数据。
| setData() | 保存值,第一个参数可以是“text/plain"和"text/uri-list" |
| getData() | 获取在setData()中保存的值。 |
| dropEffect | 属性,知道被拖动的元素能够执行哪种放置行为。搭配effectAllowed属性才有用 |
| effectAllowed | 属性,表示允许拖动元素的哪种dropEffect. |
注意:dataTransfer对象中的数据只能在drop事件处理程序中读取。如果ondrop处理程序中没有读到数据,那就是dataTransfer对象已经被销毁,数据也丢失了。
| dropEffect的值 | 含义 |
| none | 不能把拖动的元素放在这里 |
| move | 应该把拖动的元素移动到放置目标 |
| copy | 应该把拖动的元素复制到放置目标 |
| link | 表示放置目标会打开拖动的元素(但拖动的元素必须是一个连接,有URL) |
| effectAllowed值 | 含义 |
| uninitialized | 没有给被拖动的元素设置任何放置行为 |
| none |
被拖动的元素不能有任何行为 |
| copy | 只允许值为'copy'的dropEffect |
| link | 只允许值为'link'的dropEffect |
| move | 只允许值为'move'的dropEffect |
| copyLink | 只允许值为'copy'和“link”的dropEffect |
| copyMove | 只允许值为'copy'和“move”的dropEffect |
| linkMove | 只允许值为'move'和“link”的dropEffect |
| all | 允许任意的dropEffect |
html5的拖拽事件的更多相关文章
- HTML5原生拖拽事件的值传递(三dataTransfer对象)
引用一篇博客,讲解的比较详细:http://www.tuicool.com/articles/j6Zbam
- html5拖拽事件 xhr2 实现文件上传 含进度条
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- HTML5 02. 多媒体控件、拖拽事件、历史记录、web存储、应用程序缓存、地理定位、网络状态
多媒体 video:是行内块(text-align: center; 对行内块适用) <figure></figure>: 多媒体标签 : <figcaption> ...
- HTML5深入学习之鼠标跟随,拖拽事件
知识点(鼠标跟随): mousedown: 当用户用鼠标点击在某一元素上就会触发该事件 mouseover: 当鼠标指针在某一元素上移动就会触发改事件 下面这个例子的效果就是鼠标点击元素后,元素跟着 ...
- HTML5之拖拽(兼容IE和非IE)
前世:项目中需要拖动div,然后和某个div进行位置交换,这不是关键,关键是还要保存位置,然后在下次打开的时候按照保存的位置显示.还好本人功力深厚,一下子就想到了用localStorage来保存,事实 ...
- HTML5文件拖拽
HTML5新增的File API, 可以获取名称.文件大小.类型等信息,需先对DOM中的Element进行拖拽事件绑定 相关API 首先获取节点,绑定拖动到该节点的事件,可以改变鼠标形状 var dr ...
- html5 文件拖拽上传
本文首先发表在 码蜂笔记 : http://coderbee.net/index.php/web/20130703/266 html5 文件拖拽上传是个老话题了,网上有很多例子,我一开始的代码也是网 ...
- Nodejs express、html5实现拖拽上传
一.前言 文件上传是一个比较常见的功能,传统的选择方式的上传比较麻烦,需要先点击上传按钮,然后再找到文件的路径,然后上传.给用户体验带来很大问题.html5开始支持拖拽上传的需要的api.nodejs ...
- H5原生拖拽事件
使用原生js实现简单的拖拽事件 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
随机推荐
- Asp.net MVC 移除不用的视图引擎
Asp.net MVC 默认提供两个视图引擎,分别为: WebFormViewEngine 和 RazorViewEngine.MVC在查找视图时,会按照指定的顺序进行查找.当我们的MVC程序未找到相 ...
- [转]XSS的原理分析与解剖:第四章(编码与绕过)
0×01前言 很抱歉,这第四章被我推了几个月,今天是元旦难得有空,就把第四章写下.我先把主要使用的编码说下,介绍完会说下绕过. 本文建议与<杂谈如何绕过WAF>一同阅读. 0×02 URL ...
- TensorFlow分布式部署【单机多卡】
让TensorFlow飞一会儿 面对大型的深度神经网络训练工程,训练的时间非常重要.训练的时间长短依赖于计算处理器也就是GPU,然而单个GPU的计算能力有限,利用多个GPU进行分布式部署,同时完成一个 ...
- 关于Datastage资料库的一点小发现
这里的资料库,指的是Datastage Metadata层,在Datastage7.5以后,需要在安装Datastage时安装一个数据库用于存放用户数据. 昨天领导要求安装Datastage集群/高可 ...
- EventBus 3.0源码解析
现在网上讲解EventBus的文章大多数都是针对2.x版本的,比较老旧,本篇文章希望可以给大家在新版本上面带来帮助. EventBus 是专门为Android设计的用于订阅,发布总线的库,用到这个库的 ...
- Mac下git的环境搭建和基本使用
前言本文将介绍git的基本概念.环境搭建.日常使用,主要针对刚接触git,或接触不久,或好久没用忘记的同学们,当然是基于mac环境的,window系统也是大同小异!本文将从以下几个模块介绍,希望能帮助 ...
- node(3)MVC代码结构模式moogoDB的学习
---恢复内容开始--- 一.MVC代码结构模式 设计模式:观察者模式.中介者模式,这种模式,主要做的事情是处理类与类之间‘高内聚.低耦合’; 代码架构模式:MVC.MVVM.MVP Model:模型 ...
- 关于wp-autopost不能连续采集的问题,这里有解决方案
经常采集一页两页就停下来了 完整的解决方案如下: php.ini 中 max_execution_time = 0 的设置只针对PHP本身起作用php-fpm 模式下 需要修改的参数是 php-fpm ...
- 关于Nodejs开发桌面应用。NW.js 和 Electron 优缺点分析对比
从开发角度来说,选择用 nw.js 还是 election ,区别其实不是很大.大部分工作还是在自己的 javascript 和 HTML 上.国内比较有名的,比如微信web开发工具.钉钉都是基于 n ...
- Windows 7系统启动MongoDB失败解决办法?
问题现象: 1.在配置Python环境安装MongoDB时发现在“服务”里面手动启动失败,报错如下: 2.在cmd里面也无法启动,注意这里要以管理员身份启动cmd哦 问题解决: 1.需要先在bin下执 ...