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 ...
随机推荐
- 微信支付报错:time_expire时间过短,刷卡至少1分钟,其他5分钟]
查了下代码: $input->SetTime_expire(date("YmdHis", time() + 600));//二维码过期时间.默认10min 10分钟,没问题. ...
- 百万级数据 MySQL处理(转)
转自 http://www.cnblogs.com/win7xt/p/3156334.html 使用MySQL处理百万级以上数据时,不得不知道的几个常识 最近一段时间参与的项目要操作百万级数据量的 ...
- oracle 中的角色
conn sys as sysdba;create role testrole;grant create session, create table, unlimited tablespace to ...
- pageHelper插件
mybatis的分页插件使用总结 环境准备工作: 1.在使用pagehelper插件时,我已经搭建好了ssm(spring+springmvc+mybatis) 在这简单描述一下ssm搭建过程 ...
- html的button疑问
button是可以自动垂直居中的,随便给个高度,它都会自动垂直居中.用控制台查看computed属性里也没有发现和垂直相关的,贴出来希望以后能够了解或有高手看到来解惑小弟:)
- 观察者模式 - Java 实现1(使用JDK内置的Observer模式)
使用JDK内置的观察者模式 1. 可观察者(主题) 被观察的主题继承 Observable 对象, 使用该对象的调用 notifyObservers() 或 notifyObservers(arg) ...
- Selenium clear()方法无法清掉数据
问题描述 clear()方法执行过后, 数据还是在. 根本原因 存在镜像节点. 操作clear()清掉数据后, 镜像节点的数据还在, 就会再补充回去. 解决办法 添加下面代码就可以连同镜像的数据一起去 ...
- Vue2学习笔记:v-show指令
v-show指令:v-show="true/false" 控制元素显示/隐藏 1.使用 <!DOCTYPE html> <html> <head> ...
- [翻译] DoImagePickerController
DoImagePickerController An image picker controller with single selection and multiple selection. Sup ...
- [2018HN省队集训D8T1] 杀毒软件
[2018HN省队集训D8T1] 杀毒软件 题意 给定一个 \(m\) 个01串的字典以及一个长度为 \(n\) 的 01? 序列. 对这个序列进行 \(q\) 次操作, 修改某个位置的字符情况以及查 ...