首先放一个今天学到的小demo:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试</title>
<style>
* {
margin: 0;
padding: 0;
} .myImg {
width: 200px;
} #imgs {
width: 500px;
height: 500px;
background-color: cornsilk;
margin: 50px auto;
}
</style>
</head>
<body> <div id="imgs" ondragover="allowDrop(event)" ondrop="dropImg(event)"> </div> <script>
//禁用掉浏览器掉默认行为
function allowDrop(e) {
e.preventDefault();
}
//当拖放结束时调用:
function dropImg(e) {
//禁用掉浏览器掉默认行为
e.preventDefault();
//data为获取到的文件,只能在ondrop中得到
var data = e.dataTransfer.files;
//获取多个文件时,遍历文件,判断文件是否为我们所要求的类型,并做出处理
for (var i = 0; i < data.length; i++) {
//判断文件类型,indexOf()的结果假为-1,真为0
var myType = data[i].type;
console.log(myType.indexOf('image'));
if (myType.indexOf('image') === 0) {
//FileReader为html5中封装的方法,用于将文件读入内存,并读取文件中的数据
var reader = new FileReader();
//读取拖入文件的DataURL,无返回值。
reader.readAsDataURL(data[i]);
//读取文件成功时触发
reader.onload = function () {
//this.result为当前文件的base64解码
//console.log(this.result);
//创建一个img节点并添加到当前框内
var img = document.createElement("img");
img.src = this.result;
img.className = "myImg";
document.getElementById("imgs").appendChild(img);
};
//无论是否成功读取时都会触发,用来弹出错误或上传数据
reader.onloadend = function () {
//如果上传出错
if (reader.error) {
alert(reader.error);
} else {
//可以进行与服务器的上传交互
}
}
} else {
//如果传入的非图片格式
alert("请上传图片!");
} }
console.log(data);
}
</script>
</body>
</html>

  效果大家可以试一下,每一步的注释也有写。下面具体说一下:

  因为这里的div相当于一个被拖入对象,我们想要实现的效果是图片拖入时把图片呈现出来。而浏览器在解读到图片放入时默认行为是解析图片并显示。这显然不会是我们想要的效果。所以需要禁用掉浏览器对当前事件的默认行为也就是:preventDefault();

  下面就是编写当图片放入时的函数,这里又一个点。是HTML5中的fileAPI,为我们提供了很大的便利。

  根据我们打印出来的结果:

  我们可以看到,根据dataTransfe.filesr我们可以看到所选的文件列表,有兴趣的同学可以具体百度,我这里就不详细介绍了。

HTML5还提供了FileReader接口:用于将文件读入内存,并读取文件中的数据。

  var reader = new FileReader();

  

该接口总共有四个方法和六个事件:
 •readAsBinaryString(file):读取文件为二进制
 •readAsDataURL(file):读取文件DataURL
 •readAsText(file,[encoding]):读取文件为文本
 •about(none):中断文件读取 
===================================================
 •onabort:读取文件中断时触发
 •onerror:读取文件出错时触发
 •onloadstart:读取文件开始时触发
 •onprogress:读取文件中时一直触发
 •onload:读取文件成功时触发
 •onloadend:读取文件结束时触发(成功和失败都会触发)
以上事件参数e有e.target.result或this.result指向读取的结果。

拖放API:  

拖放属性:将需要拖放的元素的dragable属性设置为true(dragable=”true”)【img元素和a元素默认可以拖放。】

拖放事件:(分为拖放元素事件和目标元素事件)

拖放元素事件:
 •dragstart:拖拽前触发 
 •drag ,拖拽前、拖拽结束之间,连续触发
 •dragend , 拖拽结束触发 
目标元素事件:
 •dragenter , 进入目标元素触发
 •dragover ,进入目标、离开目标之间,连续触发
 •dragleave , 离开目标元素触发
 •drop , 在目标元素上释放鼠标触发 
但是,需要注意的是:在目标元素中dragover和drop事件中要阻止默认行为(拒绝被拖放),否则拖放不能被实现!

=======================================================================================

DataTransfer对象:专门用于存放拖放时要携带的数据,可以被设置为拖放事件的dataTransfer属性。

三个属性:

•effectAllowed : 设置光标样式(none, copy, copyLink, copyMove, link, linkMove, move, all 和 uninitialized)
 •effectAllowed:设置拖放操作的视觉效果
 •types:存入数据的种类,字符串的伪数组
 •files:获取外部拖拽的文件,返回一个fileList列表,filesList下有个type属性,返回文件的类型

4个方法:

•setData() : 设置数据 key和value(必须是字符串)
 •getData() : 获取数据,根据key值,获取对应的value
 •clearData():清除DataTransfer对象存放的数据
 •setDragImage(imageUrl,log x,long y):用img元素来设置拖放图标

    var dt=e.dataTransfer;//作为拖放事件的dataTransfer属性
dt.effectAllowed='copy';//设置光标样式
dt.setData('text/plain','hello');//设置拖放文字
dt.setDragImage(dragIcom,-10,-10);//设置拖放图标

h5实现本地图片或文件的上传的更多相关文章

  1. AFNetworking 文件上传Data,File图片,文件等上传

    一:AFNetworking的文件上传: 主要几个以下类似 - (BOOL)appendPartWithFileURL:(NSURL *)fileURL name:(NSString *)name e ...

  2. C# WinForm 富文本编辑器 用kindeditor实现本地图片只选取不上传到编辑器

    以下资料有参考网上其它童鞋作品,原作者看到务喷!!!! 以下资料有参考网上其它童鞋作品,原作者看到务喷!!!! 重要的事只要说两遍... 网上找了几天关于WinForm富文本编辑效果都不理想,各种坑, ...

  3. 【Android】图片(文件)上传的请求分析结构

    怎么在android中上传文件,即怎么用Java向服务器上传文件.上传图片,这是个老问题了,在网上能搜到现成的代码,很多朋友用起来也比较熟了,但是为什么这么写,可能很多朋友并不清楚,这篇文章就来分析一 ...

  4. Servlet+Jsp实现图片或文件的上传功能

    首先,我们创建一个新的web工程,在工程的WebRoot目录下新建一个upload文件夹,这样当我们将该工程部署到服务器上时,服务器便也生成个upload文件夹,用来存放上传的资源. 然后,在WebR ...

  5. PHP实现图片(文件)上传

    这几天整理做过的php项目,感觉这个经常会用到,传上来共享一下咯 首先,前端界面 1.表单的首行需要加上enctype="multipart/form-data",需要上传的图片必 ...

  6. jQuery+php实现ajax文件即时上传

    很多项目中需要用到即时上传功能,比如,选择本地图片后,立即上传并显示图像.本文结合实例讲解如何使用jQuery和PHP实现Ajax即时上传文件的功能,用户只需选择本地图片确定后即实现上传,并显示上传进 ...

  7. 使用HttpClient实现文件的上传下载

    1 HTTP HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源. 虽然在 JDK 的 java.net ...

  8. 利用webuploader实现超大文件分片上传、断点续传

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  9. java HTTP文件断点上传

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

随机推荐

  1. python的学习笔记__初识函数

    函数定义与调用 #函数定义 def mylen(): """计算s1的长度""" s1 = "hello world" ...

  2. Django-1- urls的路由配置, 命名, 重定向, path及re_path

    1-项目目录下配置(path方法) 这里的访问路径可以是127.0.0.1:8000/index/      2-APP目录下配置(path方法) 这里的访问路径可以是127.0.0.1:8000/t ...

  3. 迁移FRS至DFSR SYSVOL

    截至2017年6月20日,Windows 2016 RS1系统为最后一版支持FRS,后续版本将不再包含该功能,详细见 https://support.microsoft.com/en-us/help/ ...

  4. Web前端教程2-CSS教程

    目录 1. CSS基本语法 1.1. CSS基本定义 1.2. CSS布局属性 1.3. CSS文本常用属性 2.CSS选择器 2.1. 标签选择器 2.2. id选择器 2.3. 类选择器 2.4. ...

  5. Android 获取验证码倒计时实现

    Android 获取验证码倒计时实现 2017年10月24日 09:55:41 FBY展菲 阅读数:2002    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...

  6. nginx 常见正则匹配符号表示

    1.^: 匹配字符串的开始位置: 2. $:匹配字符串的结束位置: 3..*: .匹配任意字符,*匹配数量0到正无穷: 4.\. 斜杠用来转义,\.匹配 . 特殊使用方法,记住记性了: 5.(值1|值 ...

  7. 【故障公告】推荐系统中转站撑爆服务器 TCP 连接引发的故障

    上周五下午,我们在博客中部署了推荐系统,在博文下方显示“最新IT新闻”的地方显示自动推荐的关联博文.我们用的推荐系统是第四范式的推荐服务,我们自己只是搭建了一个推荐系统中转站(基于 ASP.NET C ...

  8. Ubuntu下找不到ttyUSB*问题解决

    一.硬件连接 确认Ubuntu对USB转串口设备的支持. 1.# lsmod | grep usbserial如果有usbserial,说明系统支持USB转串口. 如果没有,先安装ch340驱动或者c ...

  9. js 简单弹框toast

    新建toast.js文件 function Toast(msg,duration){ duration=isNaN(duration)?3000:duration; var m = document. ...

  10. 关联分析中寻找频繁项集的FP-growth方法

    关联分析是数据挖掘中常用的分析方法.一个常见的需求比如说寻找出经常一起出现的项目集合. 引入一个定义,项集的支持度(support),是指所有包含这个项集的集合在所有数据集中出现的比例. 规定一个最小 ...