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+JS实现仿百度搜索结果中关键字变色效果
Aug 02 Javascript
JS 实现点击a标签的时候让其背景更换
Oct 15 Javascript
jQuery实现的原图对比窗帘效果
Jun 15 Javascript
javascript 判断整数方法分享
Dec 16 Javascript
javascript Array 数组常用方法
Apr 05 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
Feb 05 Javascript
JavaScript的Backbone.js框架入门学习指引
May 07 Javascript
易被忽视的js事件问题总结
May 14 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
Jul 05 Javascript
提高Web性能的前端优化技巧总结
Feb 27 Javascript
初探js和简单隐藏效果的实例
Nov 23 Javascript
详解vue-router数据加载与缓存使用总结
Oct 29 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/01 无线电
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
使用PHP函数scandir排除特定目录
2014/06/12 PHP
Symfony控制层深入详解
2016/03/17 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
php实现数组中出现次数超过一半的数字的统计方法
2018/10/14 PHP
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
php 中序列化和json使用介绍
2013/07/08 Javascript
JavaScript中window、doucment、body的解释
2013/08/14 Javascript
jQuery DOM操作实例
2014/03/05 Javascript
原生JS实现美图瀑布流布局赏析
2015/09/07 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
AngularJS中的Directive实现延迟加载
2016/01/25 Javascript
微信小程序加载更多 点击查看更多
2016/11/29 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
2017/02/14 Javascript
easyUI下拉列表点击事件使用方法
2017/05/18 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
js实现可爱的气泡特效
2020/09/05 Javascript
浅谈Python2.6和Python3.0中八进制数字表示的区别
2017/04/28 Python
python计算列表内各元素的个数实例
2018/06/29 Python
Python实现的微信支付方式总结【三种方式】
2019/04/13 Python
python实现各种插值法(数值分析)
2019/07/30 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
使用python批量转换文件编码为UTF-8的实现
2020/04/03 Python
pytorch 实现L2和L1正则化regularization的操作
2021/03/03 Python
EGO Shoes美国/加拿大:英国时髦鞋类品牌
2018/08/04 全球购物
岗位竞聘演讲稿
2014/01/10 职场文书
治超工作实施方案
2014/05/04 职场文书
政府领导干部个人对照检查材料思想汇报
2014/09/24 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
经费申请报告
2015/05/15 职场文书
Python使用psutil库对系统数据进行采集监控的方法
2021/08/23 Python
JPA 通过Specification如何实现复杂查询
2021/11/23 Java/Android
Golang入门之计时器
2022/05/04 Golang