原生拖放

一、若要一个元素可以被拖放,首先要为元素添加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的拖拽事件的更多相关文章

  1. HTML5原生拖拽事件的值传递(三dataTransfer对象)

    引用一篇博客,讲解的比较详细:http://www.tuicool.com/articles/j6Zbam

  2. html5拖拽事件 xhr2 实现文件上传 含进度条

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  3. HTML5 02. 多媒体控件、拖拽事件、历史记录、web存储、应用程序缓存、地理定位、网络状态

    多媒体 video:是行内块(text-align: center; 对行内块适用) <figure></figure>: 多媒体标签 : <figcaption> ...

  4. HTML5深入学习之鼠标跟随,拖拽事件

    知识点(鼠标跟随): mousedown: 当用户用鼠标点击在某一元素上就会触发该事件 mouseover:  当鼠标指针在某一元素上移动就会触发改事件 下面这个例子的效果就是鼠标点击元素后,元素跟着 ...

  5. HTML5之拖拽(兼容IE和非IE)

    前世:项目中需要拖动div,然后和某个div进行位置交换,这不是关键,关键是还要保存位置,然后在下次打开的时候按照保存的位置显示.还好本人功力深厚,一下子就想到了用localStorage来保存,事实 ...

  6. HTML5文件拖拽

    HTML5新增的File API, 可以获取名称.文件大小.类型等信息,需先对DOM中的Element进行拖拽事件绑定 相关API 首先获取节点,绑定拖动到该节点的事件,可以改变鼠标形状 var dr ...

  7. html5 文件拖拽上传

    本文首先发表在  码蜂笔记 : http://coderbee.net/index.php/web/20130703/266 html5 文件拖拽上传是个老话题了,网上有很多例子,我一开始的代码也是网 ...

  8. Nodejs express、html5实现拖拽上传

    一.前言 文件上传是一个比较常见的功能,传统的选择方式的上传比较麻烦,需要先点击上传按钮,然后再找到文件的路径,然后上传.给用户体验带来很大问题.html5开始支持拖拽上传的需要的api.nodejs ...

  9. H5原生拖拽事件

    使用原生js实现简单的拖拽事件 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

随机推荐

  1. sqlserver 获取数据库、表和字段相关信息

    --获取指定服务器上的所有数据库 SELECT Name FROM Master..SysDatabases ORDER BY Name --获取指定数据库下所有表 SELECT Name FROM ...

  2. ORACLE 导出表结构及备注

    https://blog.csdn.net/u013303551/article/details/52354230 SELECT t.table_name,       t.colUMN_NAME,  ...

  3. Linux 加阿里yum源

    阿里 yum 源设置 阿里云Linux安装镜像源地址:http://mirrors.aliyun.com/CentOS系统更换软件安装源 第一步:备份你的原镜像文件,以免出错后可以恢复.mv /etc ...

  4. 回归JavaScript基础(二)

    主题:在HTML中使用JavaScript. 要想把JavaScript放到网页中,就必须涉及到Web的核心语言HTML.向HTML页面中插入JavaScript的主要方法,就是使用<scrip ...

  5. hibernate中指定非外键进行关联

    /** * 上级资源 */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "PARENT_ID", reference ...

  6. Oracle案例13—— OGG-01163 Oracle GoldenGate Delivery for Oracle, reprpt01.prm

    由于虚拟机宿主机重启,导致很多虚拟机服务需要重点关注,其中一个DG的从库和另一个report库有OGG同步,所以这里再系统恢复后检查OGG状态的时候,果然目标端的REPLICAT进程处于abend状态 ...

  7. [翻译] LLSimpleCamera

    LLSimpleCamera https://github.com/omergul123/LLSimpleCamera LLSimpleCamera is a library for creating ...

  8. 解决tableView中cell动态加载控件的重用问题

    解决tableView中cell动态加载控件的重用问题 tableView的cell,有时候需要在运行时取得对应的数据后才能够动态的创建该cell中的控件并加载到该cell中,此时,你一定会遇到重用问 ...

  9. 北美IT求职攻略

    http://www.followmedoit.com/bbs/forum.php?mod=viewthread&tid=19&extra=page%3D1 身在北美,想留下来并能过得 ...

  10. Linux 系统的网络基础_【all】

    网络基础 1.网线:568B: 白橙 橙色 白绿 蓝色 白蓝 绿色 白棕 棕色 2.交换机:电信号转发的网络设备,它可以为接入交换机的任2个网络节点设备提供电信号通信 3.路由器:连接局域网,广域网的 ...