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里面,任何元素都是可以拖放的. 需要拖放的元 ...
随机推荐
- C#类的初始化
类的构造函数 类的构造函数,有实例构造函数和静态构造函数.如果我们没有构造函数,系统会为我们生成一个默认构造函数,如果我们已经定义了构造函数,系统就不会再为我们生成构造函数. class Simp ...
- Python远程视频监控
Python远程视频监控程序 老板由于事务繁忙无法经常亲临教研室,于是让我搞个监控系统,让他在办公室就能看到教研室来了多少人.o(>﹏<)o||| 最初我的想法是直接去网上下个软件,可 ...
- GitHub上搭建个人网站
大致如下步骤: 1.注册Git账号 2.创建SSH keys 3.新建repository --- 4.设置网站 5.clone库到本地 6.提交.上传 7.预览 本教程默认你了解GitHub的基础之 ...
- WPF/Silverlight中的RichTextBox总结
WPF/Silverlight中的RichTextBox总结 在WPF或者是在Silverlight中有个非常强大的可以编辑的容器控件RichTextBox,有的时间会采取该控件来作为编辑控件.鉴 ...
- iOS 开发问题集锦(三)
iOS 开发问题集锦(三) 介于群里大部分童鞋都是新手,为了大家能够更好的提问,并且提的问题能更好的得到回答,下面写几点提问时的注意事项: 1.认真对待你的问题,在提问题前有过认真的思考: 2.先在 ...
- 判断0-N之间出现1的次数
Console.WriteLine("请输入截止数字?退出请输入y"); string input = Console.ReadLine(); int n = Convert.To ...
- Entity Framework 之 Code First
使用NuGet助您玩转代码生成数据————Entity Framework 之 Code First [前言] 如果是Code First老鸟或者对Entity Framework不感兴趣,就不用浪费 ...
- LuaBridge 中C++类和继承示例
luabridge不是一个陌生的名字,GIT上已经有3-4年多没有更新.将lua和C++相互调用封装的很方便,比如以下示例代码: /////////////////////////////////// ...
- MongoDB安装心得
本人纯前端一枚,对于数据库安装各种纠结,出了不少错误,一一列出,方便遇到同样问题的人给以参考,也加深一下自己印象. 故事开始了...Node.js在前端界比较火,由于我也是小小前端,跟随大潮流开始步入 ...
- [置顶] github 出现 Permission denied (publickey)的解决
今天写了一篇博客,想push到github上的时候出现了以下错误 Permission denied (publickey). fatal: The remote end hung up unexpe ...