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中的= =(等于)与= = =(全等于)区别
Apr 16 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
Oct 16 Javascript
Javascript小技巧之生成html元素
May 15 Javascript
jQuery基础_入门必看知识点
Jul 04 Javascript
微信小程序开发之Tabbar实例详解
Jan 09 Javascript
Node.js操作redis实现添加查询功能
May 25 Javascript
jQuery Masonry瀑布流布局神器使用详解
May 25 jQuery
基于webpack 实用配置方法总结
Sep 28 Javascript
Angular Material Icon使用详解
Nov 07 Javascript
详解vue2.0 资源文件assets和static的区别
Nov 27 Javascript
JavaScript原型对象原理与应用分析
Dec 27 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
Apr 08 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 addslashes 利用递归实现使用反斜线引用字符串
2013/08/05 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
求得div 下 img的src地址的js代码
2007/02/28 Javascript
JS 实现完美include载入实现代码
2010/08/05 Javascript
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
Javascript浅谈之引用类型
2013/12/18 Javascript
javascript实现json页面分页实例代码
2014/02/20 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
jQuery 3.0中存在问题及解决办法
2016/07/15 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
在vue项目中,使用axios跨域处理
2018/03/07 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
vue.js使用watch监听路由变化的方法
2018/07/08 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
d3绘制基本的柱形图的实现代码
2018/12/12 Javascript
layer 关闭指定弹出层的例子
2019/09/25 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
[01:28:24]NAVI vs VG Supermajor 败者组 BO3 第三场 6.5
2018/06/06 DOTA
Python实现将Excel转换成xml的方法示例
2018/08/25 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
python自动下载图片的方法示例
2020/03/25 Python
pycharm配置安装autopep8自动规范代码的实现
2021/03/02 Python
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
离婚协议书范本2014
2014/10/27 职场文书
父亲节活动总结
2015/02/12 职场文书
个人催款函范文
2015/06/24 职场文书
MySQL 逻辑备份与恢复测试的相关总结
2021/05/14 MySQL
Redis分布式锁Redlock的实现
2021/08/07 Redis
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL