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操作Select的Options的Bug(IE8兼容性视图模式)
Apr 21 Javascript
JS正则表达式验证数字代码
Jan 28 Javascript
html的DOM中Event对象onblur事件用法实例
Jan 21 Javascript
JS时间特效最常用的三款
Aug 19 Javascript
鼠标悬停小图标显示大图标
Jan 22 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
Feb 25 Javascript
JS代码防止SQL注入的方法(超简单)
Apr 12 Javascript
BootStrap树状图显示功能
Nov 24 Javascript
JS中type=&quot;button&quot;和type=&quot;submit&quot;的区别
Jul 04 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
Sep 20 Javascript
ES6 Map结构的应用实例分析
Jun 26 Javascript
JavaScript函数柯里化实现原理及过程
Dec 02 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制作静态网站的模板框架(二)
2006/10/09 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
js生成随机数(指定范围)的实例代码
2016/07/10 Javascript
基于jQuery.i18n实现web前端的国际化
2018/05/04 jQuery
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
js实现json数组分组合并操作示例
2019/02/12 Javascript
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
python多线程编程方式分析示例详解
2013/12/06 Python
Python文件操作基本流程代码实例
2017/12/11 Python
Django中间件实现拦截器的方法
2018/06/01 Python
python 基本数据类型占用内存空间大小的实例
2018/06/12 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
Python二次规划和线性规划使用实例
2019/12/09 Python
django实现将修改好的新模型写入数据库
2020/03/31 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
Python中的全局变量如何理解
2020/06/04 Python
可自定义箭头样式的CSS3气泡提示框
2016/03/16 HTML / CSS
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
我的网上商城创业计划书
2013/12/26 职场文书
《海底世界》教学反思
2014/04/16 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
北京英文导游词
2015/02/12 职场文书
2015年清明节扫墓演讲稿
2015/03/18 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
Golang二维切片初始化的实现
2021/04/08 Golang
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python
Python时间操作之pytz模块使用详解
2022/06/14 Python