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 相关文章推荐
解决 firefox 不支持 document.all的方法
Mar 12 Javascript
一个JQuery操作Table的代码分享
Mar 30 Javascript
JS的千分位算法实现思路
Jul 31 Javascript
js实现二代身份证号码验证详解
Nov 20 Javascript
js在指定位置增加节点函数insertBefore()用法实例
Jan 12 Javascript
vue + socket.io实现一个简易聊天室示例代码
Mar 06 Javascript
Angular实现可删除并计算总金额的购物车功能示例
Dec 26 Javascript
2种在vue项目中使用百度地图的简单方法
Sep 28 Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
Dec 21 Javascript
JS学习笔记之闭包小案例分析
May 29 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
Apr 29 Javascript
js实现双人五子棋小游戏
May 28 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
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
跟我学Laravel之路由
2014/10/15 PHP
php中$_POST与php://input的区别实例分析
2015/01/07 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
2016/04/15 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
JavaScript 事件参考手册
2008/12/24 Javascript
jQuery对象的链式操作用法分析
2016/05/10 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
jQuery遍历节点树方法分析
2016/09/08 Javascript
详解JS中的柯里化(currying)
2017/08/17 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
利用ES6实现单例模式及其应用详解
2017/12/09 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
小程序:授权、登录、session_key、unionId的详解
2019/05/15 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
[08:47]DOTA2每周TOP10 精彩击杀集锦vol.6
2014/06/25 DOTA
Python判断Abundant Number的方法
2015/06/15 Python
python OpenCV学习笔记之绘制直方图的方法
2018/02/08 Python
浅谈Python脚本开头及导包注释自动添加方法
2018/10/27 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
警校毕业生自我评价
2014/04/06 职场文书
校庆活动策划方案
2014/06/05 职场文书
小型婚礼主持词
2015/06/30 职场文书
2019年销售人员的职业生涯规划书
2019/03/25 职场文书
golang 实用库gotable的具体使用
2021/07/01 Golang
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript
nginx.conf配置文件结构小结
2022/04/08 Servers