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闭包
Dec 15 Javascript
AngularJS中$http服务常用的应用及参数
Aug 22 Javascript
JavaScript编码风格指南(中文版)
Aug 26 Javascript
JavaScript中的编码和解码函数
Feb 15 Javascript
js实现随机数字字母验证码
Jun 19 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
Oct 09 Javascript
vue使用axios跨域请求数据问题详解
Oct 18 Javascript
vue实现导航栏效果(选中状态刷新不消失)
Dec 13 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
Jan 19 Javascript
vue.js中ref和$refs的使用及示例讲解
Aug 14 Javascript
js通过循环多张图片实现动画效果
Dec 19 Javascript
什么是SOLID
Mar 24 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
ninety plus是什么?ninety plus咖啡好吗?
2021/03/04 新手入门
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
PHP面向对象法则
2012/02/23 PHP
php中的动态调用实例分析
2015/01/07 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
2018/01/15 PHP
网页常用特效代码整理
2006/06/23 Javascript
仿163填写邮件地址自动显示下拉(无优化)
2008/11/05 Javascript
JavaScript 继承详解(二)
2009/07/13 Javascript
jquery 应用代码 方便的排序功能
2010/02/06 Javascript
js实现鼠标感应向下滑动隐藏菜单的方法
2015/02/20 Javascript
详解JavaScript中循环控制语句的用法
2015/06/03 Javascript
JavaScript学习小结(一)——JavaScript入门基础
2015/09/02 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
jQuery深拷贝Json对象简单示例
2016/07/06 Javascript
React实现双向绑定示例代码
2016/09/19 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
2020/01/02 Javascript
在Python中编写数据库模块的教程
2015/04/29 Python
python KNN算法实现鸢尾花数据集分类
2019/10/24 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
2019/11/25 Python
解决python gdal投影坐标系转换的问题
2020/01/17 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
2020/10/27 Python
python中Pexpect的工作流程实例讲解
2021/03/02 Python
把富文本的回车转为br标签
2019/08/09 HTML / CSS
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
三好学生自我鉴定
2013/12/17 职场文书
小学生倡议书范文
2014/05/13 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
音乐教师个人总结
2015/02/06 职场文书
通讯稿范文
2015/07/22 职场文书
物业保洁员管理制度
2015/08/05 职场文书
SQL注入篇学习之盲注/宽字节注入
2022/03/03 MySQL
使用Redis实现分布式锁的方法
2022/06/16 Redis