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 相关文章推荐
jquery实现弹出层完美居中效果
Mar 03 Javascript
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
Mar 05 Javascript
JavaScript判断是否为数组的3种方法及效率比较
Apr 01 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
Apr 18 Javascript
JS实现简单易用的手机端浮动窗口显示效果
Sep 07 Javascript
JavaScript中setTimeout的那些事儿
Nov 14 Javascript
微信小程序 页面传参实例详解
Nov 16 Javascript
jQuery快速实现商品数量加减的方法
Feb 06 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
Aug 14 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
Dec 26 Javascript
详解angular2如何手动点击特定元素上的点击事件
Oct 16 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
Apr 11 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
php foreach 参数强制类型转换的问题
2010/12/10 PHP
php中ftp_chdir与ftp_cdup函数用法
2014/11/18 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
PHP+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
php实现对短信验证码发送次数的限制实例讲解
2021/03/04 PHP
JS 动态获取节点代码innerHTML分析 [IE,FF]
2009/11/30 Javascript
jQuery hover 延时器实现代码
2011/03/12 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
javascript先序遍历DOM树的方法
2016/02/27 Javascript
jQuery实现三级菜单的代码
2016/05/09 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
巧用canvas
2017/01/21 Javascript
webpack 2.x配置reactjs基本开发环境详解
2017/08/08 Javascript
详解Chai.js断言库API中文文档
2018/01/31 Javascript
vue 录制视频并压缩视频文件的方法
2018/07/27 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
2019/07/09 Javascript
[01:20:38]完美世界DOTA2联赛 GXR vs IO 第一场 11.07
2020/11/09 DOTA
python正则表达式抓取成语网站
2013/11/20 Python
Python使用MD5加密字符串示例
2014/08/22 Python
sklearn-SVC实现与类参数详解
2019/12/10 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
python3 实现口罩抽签的功能
2020/03/11 Python
使用css3和jquery实现可伸缩搜索框
2014/02/12 HTML / CSS
html+css3实现的登录界面
2020/12/09 HTML / CSS
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
旅游管理实习自我鉴定
2013/09/29 职场文书
公司给客户的感谢信
2015/01/23 职场文书
公司文体活动总结
2015/05/07 职场文书
2015年乡镇卫生院妇幼保健工作总结
2015/05/19 职场文书
北京爱情故事观后感
2015/06/12 职场文书
写作之关于描写老人的好段摘抄
2019/11/14 职场文书
python程序的组织结构详解
2021/12/06 Python