drag
1、draggable ="true" 元素可以拖拽了
2、拖拽元素事件:
dragstart 拖拽前触发
drag 拖拽前、拖拽结束之间,连续触发
dragend 拖拽结束触发
3、目标元素事件:
dragenter 进入目标元素触发
dragover 在目标元素移动触发
dragleave 离开目标元素触发
drop 在目标元素上释放鼠标触发,必须在dragover中阻止默认事件,drop才会起作用。
4、执行顺序:
drop不触发的时候:
dragstart-->drag[不动也会N次触发]-->dragenter-->(dragover-->drag)[移动就会N次触发dragover-->drag]-->dragleave-->dragend
drop触发的时候:
dragstart-->drag[不动也会N次触发]-->dragenter-->(dragover-->drag)[移动就会N次触发dragover-->drag]-->dragover-->drop-->dragend
5、dataTransfer 对象,在event下。
1、ev.dataTransfer.setData(key,value) --> ev.dataTransfer.setData('test','abc') 可解决在火狐下的问题
2、ev.dataTransfer.effectAllowed = 'copy' 光标的样式,(none, copy, copyLink, copyMove, link, linkMove, move, all 和 uninitialized)
3、ev.dataTranfer.setDragImage(obj,0,0) 设置拖拽时显示的图和位置
例子:
<div draggable="true" id="div1"></div>
<div id="div2"></div> <script type="text/javascript">
var oDiv1 = document.getElementById('div1'),
oDiv2 = document.getElementById('div2'); oDiv1.ondragstart = function(ev){
var ev = ev || event;
ev.dataTransfer.setData('test','abc'); //设置后,在火狐中拖拽才有用
ev.dataTransfer.effectAllowed = 'copy'; //设置目标元素鼠标的样式
ev.dataTransfer.setDragImage(oDiv2,0,0); //设置拖拽时显示的图和位置
console.log('开始拖拽');
};
oDiv1.ondrag = function(){
console.log('拖拽过程中....');
};
oDiv1.ondragend = function(){
console.log('拖拽完成');
};
oDiv2.ondragenter = function(){
console.log('拖拽进入放置元素');
};
oDiv2.ondragover = function(ev){
console.log('在放置元素内移动');
ev.preventDefault(); //必须阻止默认事件,ondrop才会起作用
};
oDiv2.ondragleave = function(){
console.log('拖拽离开放置元素');
};
oDiv2.ondrop = function(ev){
console.log(ev.dataTransfer.getData('test'));
console.log('释放鼠标');
};
4、ev.dataTransfer.files -->外部文件的集合(列表)
ev.dataTransfer.files[i] -->第i个文件
ev.dataTransfer.files.length -->列表长度
ev.dataTransfer.files[i].type -->文件类型:image/png、image/jpeg、text/plain等
6、FileReader 读取文件信息
var fd = new FileReader();
fd.readAsDataURL(文件); // 文件信息
fd.onload = function(){ //文件读取成功,触发
console.log(this.result) //文件数据
};
例子:
<div id="div1" draggable="true" >将文件拖拽到此区域</div>
<script type="text/javascript">
var oDiv1 = document.getElementById('div1');
oDiv1.ondragenter = function () {
this.innerHTML = '可以释放了';
};
oDiv1.ondragover = function(ev){
var ev = ev || event;
ev.preventDefault(); //为了drop有效
};
oDiv1.ondragleave = function(){
this.innerHTML = '将文件拖拽到此区域';
};
oDiv1.ondrop = function(ev) {
var ev = ev || event;
var fs = ev.dataTransfer.files;
console.log(fs.length); //列表长度
console.log(fs[0].type); //文件的类型 for (var i=0;i<fs.length;i++) {
if (fs[i].type.indexOf('image') != -1) { //判断是否是图片?
var fd = new FileReader();
fd.readAsDataURL(fs[i]);
fd.onload = function(){ oUl = document.createElement('ul');
oLi = document.createElement('li');
oImg = document.createElement('img');
oImg.src = this.result; //this.result为文件数据
oImg.style.width = '100px';
oLi.appendChild(oImg);
oUl.appendChild(oLi);
document.body.appendChild(oUl); };
} else {
alert('不是图片');
}
} ev.preventDefault(); //防止文件拖拽到目标元素时,打开文件
};
</script>
drag的更多相关文章
- HTML5 之拖放(drag与drop)
拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. HTML5 拖放实例 ...
- 通过HTML5的Drag and Drop生成拓扑图片Base64信息
HTML5 原生的 Drag and Drop是很不错的功能,网上使用例子较多如 http://html5demos.com/drag ,但这些例子大部分没实际用途,本文将搞个有点使用价值的例子,通过 ...
- 炫酷的html5(Drag 和 drop)拖放
在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放.也是一种常见的特性,即抓取对象以后拖到另一个位置. 浏览器支持 Internet Explorer 9.Firefox.Opera 12.C ...
- HTML 学习笔记 (drag & drop)
拖放(Drag & Drop)是一种常见的特性,即抓取对象以后拖到另一个位置.在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放.过去,我们用监听鼠标的Mousedown.Mouseo ...
- html drag api 在firefox 下 拖动出现新窗口的解决办法
有个功能,需要用drag drop api 来做. 发现在firefox下拖放,会出现新的tab 页签,即使在ondragover.ondrop中使用了event.preventDefault也无济于 ...
- HTML5魔法堂:全面理解Drag & Drop API
一.前言 在HTML4的时代,各前端工程师为了实现拖拽功能可说是煞费苦心,初听HTML5的DnD API觉得那些痛苦的日子将一去不复返,但事实又是怎样的呢?下面我们一起来看看DnD API的真面 ...
- 【html】学习记录-拖放(drag and drop)
目的:实现拖动目标并放置到指定区域. 使元素可拖动,涉及到元素的全局属性draggable <img draggable="true" /> 即img元素设置为可拖 ...
- HTML 5 拖放(Drag 和drop)
浏览器支持 Internet Explorer 9.Firefox.Opera 12.Chrome 以及 Safari 5. 1.把标签 draggable 属性设置为 true. 2.向标签添加on ...
- HTML5--拖动02-dragstart、drag、dragenter、dragover、dragleave、drop、dragend属性
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- html5 drag
这里是学习html5的拖放功能.这个API主流浏览器基本支持.ie浏览器是有限支持,dataTransfer.setData/getData. 在html5里面,任何元素都是可以拖放的. 需要拖放的元 ...
随机推荐
- 算法打基础——符号&递归解法
第二节 算法复杂度分析的的基本符号及 递归关系式下的复杂度解法 这次的主要知识点是: 1.各种复杂度符号 2.递归复杂度解法: 分为三种 替换法(猜!) 递归树法 主定理 1各种复杂度符号 ...
- [新概念英语II 笔记] Lesson 3: Please Send Me a Card
发现身边很多程序员都能看懂英文技术文章的60%-80%内容,但大家都有一个毛病,就是不会说,不会写作,在逛英文技术社区的时候,想发表点什么评论,总担心自己写的话有错误.究其原因, 我觉得主要原因是因为 ...
- DataSet,DataTable,XML格式互转
//// <summary> /// 将DataTable对象转换成XML字符串 /// </summary> /// <param name="dt" ...
- 利用pdf2swf将PDF转换成SWF
将PDF转换成SWF可以使用SWFTools工具中的pdf2swf(http://www.swftools.org/),CSDN快速免积分下载地址http://download.csdn.net/de ...
- Mahout之(四)Taste的架构和部署Demo
Taste简介 Taste是Apache Mahout提供的一个协同过滤算法的高效实现,它是一个基于Java实现的可扩展的,高效的推荐引擎.Taste既实现了最基本的基于用户的和基于内容的推荐算法,同 ...
- 通过实体反射实现CriteriaQuery并列条件查询
将实体反射之后获取查询字段的值,并添加到Predicate对象数组中 public Predicate getPredicateAnd(T entity, Root<T> root, Cr ...
- 纯Python综合图像处理小工具(2)图像增强
<背景> 这次分享的脚本是对图像进行增强处理,包含对图像像素的色彩增强.亮度增强.对比度增强.图像尖锐化等增强操作,主要基于PIL包的lambda和ImageEnhance模块. 使用方法 ...
- 用T4消除代码重复,对了,也错了
用T4消除代码重复,对了,也错了 背景 我需要为int.long.float等这些数值类型写一些扩展方法,但是我发现他们不是一个继承体系,我的第一个思维就是需要为每个类型重复写一遍扩展方法,这让我觉得 ...
- 关于iOS 5 Could not instantiate class named NSLayoutConstraint错误
因为使用Xcode 4.6.2,新建工程的时候SDK 6.1,但是要做低版本适配.在将iOS模拟器选为5.0编译运行时候出现Could not instantiate class named NSLa ...
- Android中检测软键盘的弹出和关闭
Android系统并没有提供明显的API来监听软键盘的弹出和关闭,但是在某些情况下我们还是有办法来检测软键盘的弹出和关闭. 从StackOverflow找到了一个不错的方法.但是这种只适用于在mani ...