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 相关文章推荐
HTML 自动伸缩的表格Table js实现
Apr 01 Javascript
判断目标是否是window,document,和拥有tagName的Element的代码
May 31 Javascript
JavaScript Chart 插件整理
Jun 18 Javascript
JS下拉缓冲菜单示例代码
Aug 30 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
Dec 18 Javascript
Javascript 运动中Offset的bug解决方案
Dec 24 Javascript
JavaScript实现输入框(密码框)出现提示语
Jan 12 Javascript
不用一句js代码初始化组件
Jan 27 Javascript
Angularjs 实现一个幻灯片示例代码
Sep 08 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
Nov 08 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
Sep 06 Javascript
vue 导航内容设置选中状态样式的例子
Nov 01 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
基于mysql的论坛(2)
2006/10/09 PHP
php中调用其他系统http接口的方法说明
2014/02/28 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
PHP 图片合成、仿微信群头像的方法示例
2019/10/25 PHP
JavaScript iframe的相互操作浅析
2009/10/14 Javascript
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
2012/03/29 Javascript
js 异步操作回调函数如何控制执行顺序
2013/12/24 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
javascript实现的多个层切换效果通用函数实例
2015/07/06 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
2015/08/11 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
2016/08/08 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
微信小程序 实现拖拽事件监听实例详解
2016/11/16 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
2016/12/08 Javascript
使用Angular material主题定义自己的组件库的配色体系
2019/09/04 Javascript
[03:21]辉夜杯主赛事 12月25日TOP5
2015/12/26 DOTA
[33:09]完美世界DOTA2联赛循环赛 Forest vs DM BO2第二场 10.29
2020/10/29 DOTA
Python数据分析库pandas基本操作方法
2018/04/08 Python
解决python3运行selenium下HTMLTestRunner报错的问题
2018/12/27 Python
Python判断有效的数独算法示例
2019/02/23 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
python super函数使用方法详解
2020/02/14 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
咖啡馆创业计划书
2014/01/26 职场文书
2014乡镇“三八”国际劳动妇女节活动总结
2014/03/01 职场文书
化工专业自荐书
2014/06/16 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
聘任通知书
2015/09/21 职场文书
2016幼儿园毕业感言
2015/12/08 职场文书
员工给公司的建议书
2019/06/24 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书