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里面,任何元素都是可以拖放的. 需要拖放的元 ...
随机推荐
- ubuntu 12.04 安装和使用花生壳
1.安装必要的开发包 [root@localhost ~]# apt-get install gcc g++ autoconf automake 2.下载phddns到某一个目录 http://www ...
- Lazy Scheduler
Lazy Scheduler:我的轻量级任务调度框架 一.背景 工作中经常涉及任务调度,一直都是采用while(true) => if hitted DO => Thread.Slee ...
- jQuery跳房子插件hopscotch
插件描述 跳房子是一个框架,使开发人员可以轻松预览产品并添加到他们的网页 跳房子接受JSON对象作为输入,并提供开发人员来控制渲染巡演显示和管理的游览进度的API. 使用步骤 要使用跳房子框架上手,只 ...
- Query插件
推荐一些常用感觉不错的jQuery插件 JQuery插件繁多,下面是个人在工作和学习中用到感觉不错的,特此记录. UI: jquery UI(官方的UI插件,很好很强大功能完备,灵活性很强,有十几套主 ...
- ngx-push-stream模块源码学习(四)——订阅
一.概述 push stream模块允许三种模式的订阅者: longpolling:每收到服务端响应数据即断开连接然后迅速重连,连接耗时可以忽略 stream:与服务端保持长连接,持续不断的请求-&g ...
- spring.net AOP配置基础
在第一篇中,我们用配置代理工厂的方式实现了面向切面记日志的功能.非常便捷的实现了AOP,但当我们需要对多个切入点配置通知的时候就需要声明多个代理工厂,这样导致配置文件内容过多,配置过程也很繁琐.spr ...
- LINUX安装SVN+添加自动同步+远程下载最新代码
LINUX安装SVN+添加自动同步+远程下载最新代码---------------------1. 新建一个用户:svnroot ,以下操作非特别说明皆为root用户操作--------------- ...
- head first--------------------template method pattern
head first---------模板方法模式 浅谈谈模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义 ...
- 记一次修复被篡改的IE首页
今天开电脑,打开IE发现首页被篡改为http://www.you2000.cn/,下意识是恶意插件造成的,可是为什么金山卫士没发现呢(我电脑上只装了一个金山卫士)?我锁定首页的啊... 只好手动运行金 ...
- 中文格式python 打印json格式的数据中文显示问题
废话就不多说了,开始... 平日会有这么一个应用场景,会用python去处置json格式的web API,以“ip.taobao.com”的API为例,详情见http://ip.taobao.com/ ...