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的更多相关文章

  1. HTML5 之拖放(drag与drop)

    拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. HTML5 拖放实例 ...

  2. 通过HTML5的Drag and Drop生成拓扑图片Base64信息

    HTML5 原生的 Drag and Drop是很不错的功能,网上使用例子较多如 http://html5demos.com/drag ,但这些例子大部分没实际用途,本文将搞个有点使用价值的例子,通过 ...

  3. 炫酷的html5(Drag 和 drop)拖放

    在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放.也是一种常见的特性,即抓取对象以后拖到另一个位置. 浏览器支持 Internet Explorer 9.Firefox.Opera 12.C ...

  4. HTML 学习笔记 (drag & drop)

    拖放(Drag & Drop)是一种常见的特性,即抓取对象以后拖到另一个位置.在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放.过去,我们用监听鼠标的Mousedown.Mouseo ...

  5. html drag api 在firefox 下 拖动出现新窗口的解决办法

    有个功能,需要用drag drop api 来做. 发现在firefox下拖放,会出现新的tab 页签,即使在ondragover.ondrop中使用了event.preventDefault也无济于 ...

  6. HTML5魔法堂:全面理解Drag & Drop API

    一.前言    在HTML4的时代,各前端工程师为了实现拖拽功能可说是煞费苦心,初听HTML5的DnD API觉得那些痛苦的日子将一去不复返,但事实又是怎样的呢?下面我们一起来看看DnD API的真面 ...

  7. 【html】学习记录-拖放(drag and drop)

    目的:实现拖动目标并放置到指定区域.   使元素可拖动,涉及到元素的全局属性draggable <img draggable="true" /> 即img元素设置为可拖 ...

  8. HTML 5 拖放(Drag 和drop)

    浏览器支持 Internet Explorer 9.Firefox.Opera 12.Chrome 以及 Safari 5. 1.把标签 draggable 属性设置为 true. 2.向标签添加on ...

  9. HTML5--拖动02-dragstart、drag、dragenter、dragover、dragleave、drop、dragend属性

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  10. html5 drag

    这里是学习html5的拖放功能.这个API主流浏览器基本支持.ie浏览器是有限支持,dataTransfer.setData/getData. 在html5里面,任何元素都是可以拖放的. 需要拖放的元 ...

随机推荐

  1. (转)C++重写、重载和重定义的区别

    C++ 重写重载重定义区别 (源自:http://blog.163.com/clevertanglei900@126/blog/static/111352259201102441934870/) 1 ...

  2. Router

    backbone库学习-Router backbone库的结构http://www.cnblogs.com/nuysoft/archive/2012/03/19/2404274.html 本文的例子来 ...

  3. ASP.NET Web安装程序

    键发布ASP.NET Web安装程序,搞WebForm的童鞋看过来... 前言:最近公司有个Web要发布,但是以前都是由实施到甲方去发布,配置,这几天有点闲,同事让我搞一个一键发布,就和安装软件那样的 ...

  4. Caffe Ubuntu14.04 64位 的最快安装 (cuda7.5 + cudnn7.0 2016最新)

    最近因为各种原因,装过不少次Caffe,安装过程很多坑,为节省新手的时间,特此总结整个安装流程. 关于Ubuntu 版本的选择,建议用14.04这个比较稳定的版本,但是千万不要用麒麟版!!!比原版体验 ...

  5. Use weechat (IRC client) on OS X. MacBook Pro

    Weechat is a console IRC client. It is opensource and very easy to use. I use weechat in my Linux PC ...

  6. jquery 表单 清空

    做了个复杂查询的页面,字段太多了,填了一次,想清空挺麻烦的 $('#myform')[0].reset(); 虽然reset方法可以做到一部分,但是如果你有个元素是这样的 <input name ...

  7. 遭遇ORA-01078,LRM-00109,ORA-27046 SPFILE文件损坏

    今天在启动数据库时遭遇到 $ sqlplus / as sysdba SQL*Plus: Release 10.2.0.4.0 - Production on Tue Jul 16 21:28:03 ...

  8. kubernetes service分析

    service type k8s中service主要有三种: ClusterIP: use a cluster-internal IP only - this is the default and i ...

  9. 【Zookeeper】源码分析之持久化--FileSnap

    一.前言 前篇博文已经分析了FileTxnLog的源码,现在接着分析持久化中的FileSnap,其主要提供了快照相应的接口. 二.SnapShot源码分析 SnapShot是FileTxnLog的父类 ...

  10. app外包开发注意事项大全『最新』

    随着移动互联网的高速发展,很多互联网创业公司或传统向互联网转型的公司都急需发开一款app软件,多数公司会选择让外包公司来开发.问题来了,App外包市场鱼龙混杂,我们要如何在这里面选择一个靠谱的公司,这 ...