1.文件API:(File API)

file类型的的表单控件选择的每一个文件都是一个file对象,而FileList对象则是这些file对象的集合列表,代表所选择的所有文件。file对象继承于Blob对象,该对象表示二进制原始数据,提供slice方法,可以访问到字节内部的原始数据块。总之,file对象包含与FlieList对象,而file对象继承于Blob对象!

各对象的相关属性关系:

FileReader接口:

由图可知: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指向读取的结果!

2.拖放API:

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

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

拖放元素事件:

•dragstart:拖拽前触发

•drag ,拖拽前、拖拽结束之间,连续触发

•dragend , 拖拽结束触发

目标元素事件:

•dragenter , 进入目标元素触发

•dragover ,进入目标、离开目标之间,连续触发

•dragleave , 离开目标元素触发

•drop , 在目标元素上释放鼠标触发

但是!需要注意的是:在目标元素中dragover和drop事件中要阻止默认行为(拒绝被拖放),否则拖放不能被实现!

--------------------------------------------------------------------------------

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

3个属性: •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元素来设置拖放图标

//示例:

target.addEventListener('dragstart',function(e){

var fs = e.dataTransfer.files;//获取拖放的文件对象列表FlieList对象

var dt=e.dataTransfer;//作为拖放事件的dataTransfer属性

dt.effectAllowed='copy';

dt.setData('text/plain','hello');

dt.setDragImage(dragIcom,-10,-10);

});

3.拖拽上传图片预览:

思路:

1.熟悉文件拖拽 目标元素 的四个事件,注意:ondragover、ondrop事件中阻止默认行为

2.拖拽放置后,获取到文件对象集合:e.dataTransfer.files

3.循环该集合中的每个文件对象,判断文件类型以及文件大小,是指定类型则进行相应的操作

4.读取文件信息对象:new FileReader(),它有读取文件对象为DataUrl等方法:readAsDataURL(文件对象)、读取成功之后触发的事件:onload事件等,this.result为读取到的数据

5.在FileReader对象中的几个事件中进行相应的逻辑处理

HTML:

请将图片文件拖拽至此区域!

总加载数:100

JQ:

$(function() {

/*思路:

*1.熟悉文件拖拽 目标元素 的四个事件,注意:ondragover、ondrop事件中阻止默认行为

*2.拖拽放置后,获取到文件对象集合:e.dataTransfer.files

*3.循环该集合中的每个文件对象,判断文件类型以及文件大小,是指定类型则进行相应的操作

*4.读取文件信息对象:new FileReader(),它有读取文件对象为DataUrl等方法:readAsDataURL(文件对象)、读取成功之后触发的事件:onload事件等,this.result为读取到的数据

*5.在FileReader对象中的几个事件中进行相应的逻辑处理

*

*/

//必须将jq对象转换为js对象,调用原生方法

var oDiv = $(".container").get(0);

var oP = $(".text");

//进入

oDiv.ondragenter = function() {

oP.html('');

}

//移动,需要阻止默认行为,否则直接在本页面中显示文件

oDiv.ondragover = function(e) {

e.preventDefault();

}

//离开

oDiv.onleave = function() {

oP.html('请将图片文件拖拽至此区域!');

}

//拖拽放置,也需要阻止默认行为

oDiv.ondrop = function(e) {

e.preventDefault();

//获取拖拽过来的对象,文件对象集合

var fs = e.dataTransfer.files;

//若为表单域中的file标签选中的文件,则使用form[表单name].files[0]来获取文件对象集合

//打印长度

console.log(fs.length);

//循环多文件拖拽上传

for (var i = 0; i < fs.length; i++) {

//文件类型

var _type = fs[i].type;

console.log(_type);

//判断文件类型

if (_type.indexOf('image') != -1) {

//文件大小控制

console.log(fs[i].size);

//读取文件对象

var reader = new FileReader();

//读为DataUrl,无返回值

reader.readAsDataURL(fs[i]);

reader.onloadstart = function(e) {

//开始加载

}

// 这个事件在读取进行中定时触发

reader.onprogress = function(e) {

$("#total").html(e.total);

}

//当读取成功时触发,this.result为读取的文件数据

reader.onload = function() {

//文件数据

// console.log(this.result);

//添加文件预览

var oImg = $("");

oImg.attr("src", this.result);

$(oDiv).append(oImg); //oDiv转换为js对象调用方法

}

//无论成功与否都会触发

reader.onloadend = function() {

if (reader.error) {

console.log(reader.error);

} else {

//上传没有错误,ajax发送文件,上传二进制文件

}

}

} else {

alert('请上传图片文件!');

}

}

}

});

效果图:

总结:结合拖放事件API,DataTransfer对象和文件读取对象FileList等方面的知识,实现简易拖拽上传图片预览效果。需要了解熟悉个对象的关系以及用法,明确好实现思路!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

html5实现拖拽上传图片,JS HTML5拖拽上传图片预览相关推荐

  1. html5图片自动翻转,纯js实现360度旋转预览图片特效

    这是一款纯js实现360度旋转预览图片特效.该js特效仅使用120行代码,即可实现通过滑块.或鼠标手动360度旋转图片,以及自动360度旋转图片的效果. 使用方法 HTML结构 import Roll ...

  2. 基于vue element-ui 封装上传图片组件 功能:上传,删除,预览,上传图片水印,拖拽排序,上传进度条等

    学习目标: 我们在开发后台时肯定避免不了上传图片的功能 例如: 上传图片回显 上传完成 : 预览查看 , 删除等 如果是图片列表,还可能让你拖动图片排序 有的后台项目可能要给图片添加水印,添加标记 有 ...

  3. 图片上传(支持拖拽上传)及列表图片预览

    要注意的是图片路径 先看效果图: 下面是代码啦: 前端ftl index: <#assign base=request.contextPath/> <!DOCTYPE HTML> ...

  4. blob html 预览_iframe和HTML5 blob实现JS,CSS,HTML直接当前页预览

    这篇文章发布于 2017年08月24日,星期四,01:09,归类于 js实例. 阅读 1755 次, 今日 1350 次 一.关于前端代码效果实时预览 前端代码效果实时预览的需求实际上是非常常见的,例 ...

  5. layui实现上传图片鼠标悬浮展示删除及预览图标

    layui实现上传图片鼠标悬浮展示删除及预览图标 ** 进行layui实现图片上传功能时,发现无法实现悬浮展示删除及预览图标功能,查询很多资料后,自己整合一套自己的方法,特此记录. 整体思路就是使用鼠 ...

  6. js实现图片上传预览及进度条

    js实现图片上传预览及进度条 原文js实现图片上传预览及进度条 最近在做图片上传的时候,由于产品设计的比较fashion,上网找了比较久还没有现成的,因此自己做了一个,实现的功能如下: 1:去除浏览器 ...

  7. js实现图片上传预览功能

    js实现图片上传预览功能 很多业务场景下,我们需要在用户上传图片前,先预览待上传的图片 <body><input type="file"><img s ...

  8. php 图片预览原理,JavaScript_纯JS实现的批量图片预览加载功能,1.实现原理直接见代码,需要一 - phpStudy...

    纯JS实现的批量图片预览加载功能 1.实现原理直接见代码,需要一张转圈的小图片,需要预览的所有图片默认的位置全是这张小图片,滚轮滚到原图需要出现的位置时候,预览加载替换小图片.实现效果 复制代码 代码 ...

  9. js实现移动端图片预览:手势缩放, 手势拖动,双击放大...

    原文:js实现移动端图片预览:手势缩放, 手势拖动,双击放大... 前言 本文将介绍如何通过js实现移动端图片预览,包括图片的 预览模式,手势缩放,手势拖动,双击放大等基本功能: 扫码查看示例效果: ...

  10. js上传视频,预览视频

    js上传视频,预览视频 <videostyle="width:300px; height:auto;object-fit: fill;"playsinlinecontrols ...

最新文章

  1. Android模拟器SD卡的使用
  2. php e框架是啥,几款主流PHP框架的优缺点评比
  3. php mysql可以跨站_PHP防跨站之open_basedir目录设置
  4. maven构建scala工程并最终运行的所有细节(scala maven helloworld)
  5. GMQ集团推出全球创新型金融衍生品交易平台
  6. DELPHI设置枚举类型size
  7. 想快速了解AI各领域的前沿研究成果?可以来这个网站看看 | 资源
  8. 三部委明确能源互联网建设10重点
  9. 解决: Android.bp ninja: error: unknown target MODULES-IN-xxx报错
  10. 上海世博会物联网技术应用
  11. 漫话Kubernetes的网络架构,该用NodePort还是Ingress还是load balancer?
  12. 决策树之CART算法
  13. Jupyter Nbextensions插件功能大全
  14. WebSocket实现简单多人聊天
  15. 会计分录、科目、账户
  16. Mysql Table doesn't exist问题解决
  17. HDLBits练习(三)多路复用器,算术电路,卡诺图电路
  18. 用java做出长方体的表面积_编写java程序,输入一个长方体的长、宽、高,求长方体的表面积和体积,并将结果显示,一个长方体的...
  19. 电子政务平台需求开发 建设方案
  20. 专业游戏玩家如何选导热硅脂

热门文章

  1. 客户端与服务站《Socket》
  2. POJ1338 Ugly Numbers(解法二)
  3. php://input
  4. Red Hat Enterprise Linux 7 启动过程
  5. 强大命令——Ping命令总结
  6. 分享过滤条件中增加一个自定义过滤变量插件代码
  7. 29.TCP/IP 详解卷1 --- 网络文件系统
  8. hpm1216nfh驱动程序_惠普M1216nfh驱动下载
  9. css3中的transform中的3d变换:translatez()与transform-origin-z()的区别
  10. jquery使用规则