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 相关文章推荐
让IE8支持DOM 2(不用框架!)
Dec 31 Javascript
innerHTML 和 getElementsByName 在IE下面的bug 的解决
Apr 09 Javascript
jQuery在vs2008及js文件中的无智能提示的解决方法
Dec 30 Javascript
禁用页面部分JavaScript不是全部而是部分
Sep 03 Javascript
javascript中函数作为参数调用的方法
Feb 09 Javascript
初识Node.js
Mar 20 Javascript
JavaScript面向对象的实现方法小结
Apr 14 Javascript
AngularJS入门教程之静态模板详解
Aug 18 Javascript
搭建Bootstrap离线文档的方法
Dec 02 Javascript
vue动态子组件的两种实现方式
Sep 01 Javascript
Vue退出登录时清空缓存的实现
Nov 12 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
Aug 13 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中去除所有js,html,css代码
2010/10/12 PHP
PHP数组实例总结与说明
2011/08/23 PHP
Mac下php 5升级到php 7的步骤详解
2017/04/26 PHP
PHP ADODB实现事务处理功能示例
2018/05/25 PHP
Django中通过定时任务触发页面静态化的处理方式
2018/08/29 PHP
javascript 检测浏览器类型和版本的代码
2009/09/15 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
Vue基于NUXT的SSR详解
2017/10/24 Javascript
NodeJS简单实现WebSocket功能示例
2018/02/10 NodeJs
Angular异步变同步处理方法
2018/08/13 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
Vue-cli3生成的Vue项目加载Mxgraph方法示例
2020/05/31 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
Python实现批量下载图片的方法
2015/07/08 Python
win系统下为Python3.5安装flask-mongoengine 库
2016/12/20 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
python使用fork实现守护进程的方法
2017/11/16 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
python石头剪刀布小游戏(三局两胜制)
2021/01/20 Python
深入学习python多线程与GIL
2019/08/26 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
pytorch 模型的train模式与eval模式实例
2020/02/20 Python
Django admin 实现search_fields精确查询实例
2020/03/30 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
用CSS3将你的设计带入下个高度
2009/08/08 HTML / CSS
贝玲妃英国官网:Benefit英国
2018/02/03 全球购物
财务会计专业求职信范文
2013/12/31 职场文书
自行车租赁公司创业计划书
2014/01/28 职场文书
推荐信格式要求
2014/05/09 职场文书
实践论读书笔记
2015/06/29 职场文书
在JavaScript中如何使用宏详解
2021/05/06 Javascript
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang