大家好 !!  又见面了, 今天我们来搞一搞   H5的新增API    FileReader     真是一个超级超级方便的API呢!!!很多场景都可以使用..........

我们先不赘述MDN文档里的内容, 我们从  1  到  0, 从 一个 小Demo 入手 开始 了解 它;

请开始你的表演:

是不是简单又炫酷, 我们从头开始来看, 界面分三个部分

1   文件input框

2    预览部分

3   进度条

HTML代码:

 1 <div class="file-preview">
 2     <div class="add" style="width: 50px;height: 50px;line-height: 50px;text-align: center;background-color: #eeeeee;position: relative;" >
 3         +
 4         <input type="file" id="fileInput" style="opacity: 0;z-index: 1;position: absolute;top: 0;left: 0;width: 100%;height: 100%;cursor: pointer;">
 5     </div> 6     <div class="image-box" style="margin-top: 20px;height: 200px;line-height: 0">
 7         <img src="" alt="" style="max-height: 200px;display: none" id="image">
 8         <video src="" controls style="display: none;" height="200"></video>
 9     </div>10     <div class="progress" style="background-color: #cccccc;width: 700px;height: 20px;position: relative;text-align: center;line-height: 20px;margin-top: 20px;">
11         <span id="percent">0%</span>
12         <div class="loading" style="position: absolute;height: 100%;background-color: blue;top: 0;left: 0;"></div>
13     </div>
14 </div>

HTML结构应该很清晰吧,  我们重点讲js部分

First      获取要操作的Dom元素

    

 1 var img = document.querySelector('#image');   // 获取image
 2
 3 var video = document.querySelector('video');  //  获取video
 4
 5 var input = document.querySelector('#fileInput'); // 获取input
 6
 7 var loading = document.querySelector('.loading'); // 获取进度条
 8
 9 var percent = document.querySelector('#percent'); // 获取百分比
10
11 var reader = new FileReader(); // 初始化一个 FileReader
12
13 var file = {}; // 文件对象
14
15 var fileType = ''; //  文件类型

Second    监听input 上的change事件   ,  获取选择的本地文件

 1 input.addEventListener('change', function(event) {
 2     file = event.target.files[0];    // 获取文件对象
 3     video.style.display = 'none';   // 隐藏video
 4     img.style.display = 'none';     //  隐藏image
 5     percent.innerHTML = '0%';       //  初始化百分比
 6     loading.style.width = '0px';    //  初始化进度条
 7     if (event.target.files.length) {
 8         fileType = file.type.split('/')[0];  // 获取文件类型
 9         reader.readAsDataURL(file);   // 开始读取文件
10     }
11 });

 fileReader 上   readAsDataURL() 方法是把文件 转换成 一个 base64编码的字符串,可以放在图片或者视频的src里, 最常用

        readAsText()  把文件 转换成 一个特定编码格式的字符串, 没有指定编码格式默认为utf-8  常用

        readAsBinaryString()  把文件 转化成一个二进制数据  了解即可

        readAsArrayBuffer() 把文件 转换成一个 ArrayBuffer 数据  了解即可

 

 这些方法转换后的数据都在FileReader.result上    ,还有一个终止读取的方法   abort()

  继续正题.................

Third    文件开始读取后    FileRead 给我们提供了   读取   状态  的 事件    , 我们绑定这些事件来看看效果:

 1 reader.onabort = function (e) {   // 终止读取触发     abort()方法会触发它
 2     console.log('abort')
 3 };
 4
 5 reader.onloadstart = function (e) {  // 开始读取触发
 6     console.log('start')
 7 };
 8
 9 reader.onprogress = function (e) {  // 读取过程触发  可以获得读取进度
10
11     percent.innerHTML = (e.loaded/e.total).toFixed(2) * 100 + '%';  // 进度百分比
12
13     loading.style.width = (e.loaded/e.total) * 700 + 'px';   // 进度百分比 乘  总宽度  等于  进度条的宽度
14 };
15
16 reader.onload = function (e) {   // 读取结束并且读取成功触发  在这里可以拿到result
17     console.log('loaded');
18     loading.style.width = '700px';   // 进度条完成
19     percent.innerHTML = '100%';     // 百分比完成
20     if (fileType === 'video') {
21         video.src = this.result;
22         video.style.display = 'block'   // 显示视频
23     } else if (fileType === 'image'){
24         img.src = this.result;
25         img.style.display = 'block'  // 显示图片
26     }
27 };
28
29 reader.onloadend = function (e) {  // 读取结束触发 , 在load之后
30     console.log('end')
31 };

这里要注意一点,  load 是读取成功触发,   loadend 不管读取成功或者失败都会触发,

所以我们在load  里拿到转化结果。

到此   demo  就做完啦!!!!!!!

同学们学会了吗,

最后提一嘴,  虽然FileReader 很好用     ,  但是  ————————————

————————   base64转码很费时间, 如果文件非常大的话, 很慢。。。。。

还有可能转不出来。。。。。

这种情况  推荐使用    URL.createObjectURL(file)创建一个DOMString, 直接使用这个DOMString 就好啦,

使用完记得 使用   URL.revokeObjectURL()   清掉

本期讲解到此结束, 我们下期再见  。

转载于:https://www.cnblogs.com/LHLVS/p/10602038.html

H5 新特性之 fileReader 实现本地图片视频资源的预览相关推荐

  1. JS兼容各个浏览器的本地图片上传即时预览效果

    JS兼容各个浏览器的本地图片上传即时预览效果 很早以前 在工作曾经碰到这么一个需求,当时也是纠结了很久,也是google了很久,没有碰到合适的demo,今天特意研究了下这方面的的问题,所以也就做了个简 ...

  2. windows 电脑图片/视频不展示预览图

    文章目录 windows 电脑图片/视频不展示预览图 描述 可能原因及解决办法 1. Windows的缩略图预览功能被禁用 2. 缩略图预览功能卡住 3. 重新安装Windows Media Play ...

  3. 微信小程序使用本地图片在真机预览不显示的问题解决

    开发工具上本地图片可以显示,但是在真机上预览的时候不能显示 通常我们代码路径是代码是这样写的 <view class="logo"><image src=&quo ...

  4. uni-app微信小程序image引入图片;background-image背景图引入图片;小程序预览本地图片;小程序图片过大引入报错;获取本地图片的网络地址;

    uni-app小程序图片使用有image标签和background-image背景图两种方式: 下有获取本地图片的网络地址方式:见第四步 一.方式一:使用image标签引入: uni-app官方ima ...

  5. 前端面试题二:ES6/7/8新特性、性能优化、数据交互、H5新特性

    目录 一.ES6/7/8新特性 二.性能优化 三.数据交互 四.H5新特性 一.ES6/7/8新特性 1.ES6中新增了哪些数据类型? Symbol类型(基本) Set类型(复杂) Map类型(复杂) ...

  6. 【面试】面试官:说一说H5新特性

    H5 新特性 1.拖拽释放(Drap and drop) API ondrop拖放是一种常见的特性,即抓取对象以后拖到另一个位置 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放 2.自定义 ...

  7. 前端16天--IFC、BFC、H5新特性、选择器、伪类元素、扩展盒模型、圆角、盒子阴影等--2021/4/21

    前端16天–IFC.BFC.H5新特性–2021/4/21 HTML5是HTML标准的最新演进版本: 1.是一个新的HTML语言版本包含了新的元素.属性和行为. 2.同时包含了一系列可以被用来让web ...

  8. HTML5新特性:FileReader 和 FormData

    最近用vue做的项目中有用到一个图片上传,实时预览的功能:其中我用到了两个HTML5的新特性:FileReader和FormData: 首先介绍下这两个方法: HTML5定义了FileReader作为 ...

  9. h5新特性DOMAST的简单理解

    h5新特性 1.一些语义化标签 header.footer.nav.aside.article.section.hgroup(h1~h6的集合) document.createElement('hea ...

  10. html5新特性表单控件,老生常谈h5新特性1:(表单)

    老生常谈h5新特性1:(表单) HTML5新特性 -- 十大新特性 (1)新的语义标签和属性 (2)表单新特性 (3)视频和音频 (4)Canvas绘图 (5)SVG绘图 (6)地理定位 (7)拖放A ...

最新文章

  1. ad远程控制用户计算机,远程控制电脑|远程控制计算机|怎样远程控制电脑 - ManageEngine Remote Access Plus...
  2. linux c 获取 CPU、内存、IO、磁盘、网速
  3. CSDN 文章标题含非法字符
  4. php html class,如何使用HTML span标签的class属性?这里有关于class属性的详解
  5. 【转:SAP学习篇】Fiori 的基本架构
  6. 浅谈a标签属性href的mailto更多用法
  7. 进程间通信--无名管道(pipe)
  8. 详解分布式协调服务 ZooKeeper
  9. Asp.net中的HttpModule和HttpHandler的简单用法
  10. python进程数据共享_python程序中的进程操作-进程间的数据共享
  11. Opencv单目标定flag的设定
  12. 视频播放器本地代理服务设计
  13. 美图欣赏,转载[原文链接http://toutiao.com/a4001258776/]
  14. PostgreSQL使用pgAdmin3不能编辑表里的数据
  15. java 查看jar包内容_jar文件怎么打开?如何查看jar文件内容?
  16. Java生成随机数公式
  17. 理解Liang-Barsky裁剪算法的算法原理
  18. 查看已激活Windows的密钥
  19. eureka:自我保护机制_对自我怀疑的开发人员:您足够好吗?
  20. 【bzoj1150】【CSTC2007】【数据备份】【贪心】

热门文章

  1. 世界500百强企业中国的CEO对我们的忠告!!!!!我们要告别稚气了
  2. pr剪辑教程,如何跨剪辑应用和调整效果?
  3. iOS开发之报错:IntxLNK
  4. ceph分布式存储简介
  5. PostgreSQL rocks, except when it blocks: Understanding locks
  6. EMNLP2018 - 语言理解+对话系统的最新进展
  7. test luasql's postgresql driver performance (not better than pgbench)
  8. Linux程序包管理和yum用法
  9. Java Tomcat SSL 服务端/客户端双向认证
  10. Hibernate性能优化2( 转)