js实现前端图片上传即时预览功能


Posted in Javascript onAugust 02, 2017

现在,在实现前端图片即时预览,可以说是一件很简单的事情了。

我们只需要用file对象和FileReader对象,既可以轻松实现,无需下载类库。

HTML代码

<!DOCTYPE html>
<html>
<body>
<img src="">
<form>
 <input type="file" name="image" />
</form>
</body>
</html>

先来说说input,input这个元素,具有一个files属性,该属性是一个filelist对象,是file对象的集合。

你可以通过input.files[0]的语法形式拿到这个file对象,不过遗憾的是,这个对象仅仅包含了用户选择的文件的相关信息,如文件名,大小,类型,最后修改时间等,并不直接提供文件的数据。

程序员只能通过这些信息对用户选择的文件进行一些限制。

所以,我们要使用另一个对象FileReader来读取到用户选择的文件的数据

我们初始化一个FileReader对象

var x=new FileReader;

这是一个初始化完成的FileReader对象具有的一些属性和支持的事件

js实现前端图片上传即时预览功能

类似于Ajax,FileReader提供了readyState来查看读取的状态,不过并没有什么卵用

因为FileReader还提供了onloadend这样的事件,来处理数据读取完成后该干些什么,onprogress是最有趣的,只要在读取数据,那么这个事件会被不停的触发,可以实现那种进度条效果。

还有一个极其重要的属性result,初始化完成时,该值是null,当读取数据后,该值就是所获得的数据。

接下来,我们就可以使用这个对象读取用户选择的图片了,没有错就是这么简单

当用户选择了某一个文件时,就会在input上触发change事件,这意味着我们可以开始读取数据了

document.forms[0].elements[0].onchange=function(){
  x.readAsDataURL(this.files[0]);
 }

readASDateURL这个方法,可以读取一个file对象,并把数据以base64的格式填充到FileReader对象中的result属性中去。

当数据读取完毕,就会触发onloadend事件,在这个事件中,就可以把数据填到img标签中去

x.onloadend=function(){
  document.images[0].src=this.result;
 }

 完整版代码

<!DOCTYPE html>
<html>
<body>
<img src="">
<form>
 <input type="file" name="image" />
</form>
<script type="text/javascript">
 var x=new FileReader;
 document.forms[0].elements[0].onchange=function(){
  x.readAsDataURL(this.files[0]);
 }
 x.onloadend=function(){
  document.images[0].src=this.result;
 }
</script>
</body>
</html>

当然,这里只是一个小小的Demo,仅仅实现了本地预览,抛砖引玉,你还可以在此基础上轻松实现对上传文件的一些判断和限制,或者是UI上的提升。

FileReader的能力并不止步于此,不仅仅有readASDataURL这种方法。 

js实现前端图片上传即时预览功能

不仅是图片,音乐,视频都可以实现对于的本地预览,只要把result属性的值,赋值给对应的audio或video标签的src属性即可,不过因为内存限制,读取视频往往失败。

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

Javascript 相关文章推荐
Javascript document.referrer判断访客来源网址
May 15 Javascript
基于Jquery的跨域传输数据(JSONP)
Mar 10 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
Jan 18 Javascript
js子页面获取父页面数据示例
May 15 Javascript
jQuery ajax应用总结
Jun 02 Javascript
easyui导出excel无法弹出下载框的快速解决方法
Nov 10 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
Nov 23 Javascript
在原生不支持的旧环境中添加兼容的Object.keys实现方法
Sep 11 Javascript
vue 中Virtual Dom被创建的方法
Apr 15 Javascript
layui.tree组件的使用以及搜索节点功能的实现
Sep 26 Javascript
小程序实现录音上传功能
Nov 22 Javascript
js简单实现自动生成表格功能示例
Jun 02 Javascript
使用JavaScript实现表格编辑器(实例讲解)
Aug 02 #Javascript
使用Node.js搭建静态资源服务详细教程
Aug 02 #Javascript
原生js获取left值和top值的三种方法
Aug 02 #Javascript
认识less和webstrom的less配置方法
Aug 02 #Javascript
基于Jquery Ajax type的4种类型(详解)
Aug 02 #jQuery
详解基于node的前端项目编译时内存溢出问题
Aug 01 #Javascript
javascript 中select框触发事件过程的分析
Aug 01 #Javascript
You might like
中国收音机工业发展史
2021/03/02 无线电
再次研究下cache_lite
2007/02/14 PHP
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
php实现只保留mysql中最新1000条记录
2015/06/18 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
zend framework重定向方法小结
2016/05/28 PHP
php-7.3.6 编译安装过程
2020/02/11 PHP
javascript据option的value值快速设定初始的selected选项
2007/08/13 Javascript
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
js post提交调用方法
2014/02/12 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
js实现的在线调色板功能完整实例
2016/12/21 Javascript
详解vue-cli开发环境跨域问题解决方案
2017/06/06 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
Vue利用Blob下载原生二进制数组文件
2019/09/25 Javascript
微信小程序实现watch监听
2020/06/04 Javascript
python制作最美应用的爬虫
2015/10/28 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
Python对CSV、Excel、txt、dat文件的处理
2018/09/18 Python
python游戏地图最短路径求解
2019/01/16 Python
python实现远程控制电脑
2019/05/23 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
python快速编写单行注释多行注释的方法
2019/07/31 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
日本民宿预约平台:STAY JAPAN
2017/07/01 全球购物
STP协议的主要用途是什么?为什么要用STP
2012/12/20 面试题
材料化学应届生求职信
2013/10/09 职场文书
学习决心书
2014/03/11 职场文书
文明寝室标语
2014/06/13 职场文书
党员评议自我评价
2015/03/03 职场文书
生日祝酒词大全
2015/08/10 职场文书
2015年秋学期教研工作总结
2015/10/14 职场文书