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 bom是什么及bom和dom的区别
Nov 26 Javascript
AngularJS数据源的多种获取方式汇总
Feb 02 Javascript
js控制TR的显示隐藏
Mar 04 Javascript
JS取模、取商及取整运算方法示例
Oct 13 Javascript
AngularJS实现给动态生成的元素绑定事件的方法
Dec 14 Javascript
iview中Select 选择器多选校验方法
Mar 15 Javascript
vue实现点击选中,其他的不选中方法
Sep 05 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
Jan 18 Javascript
Layui之table中的radio在切换分页时无法记住选中状态的解决方法
Sep 02 Javascript
vue选项卡切换登录方式小案例
Sep 27 Javascript
基于JavaScript实现大文件上传后端代码实例
Aug 18 Javascript
vuex的使用和简易实现
Jan 07 Vue.js
使用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
main.php
2006/12/09 PHP
php中用数组的方法设置cookies
2011/04/21 PHP
php中的异常和错误浅析
2017/05/03 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
JavaScript字符串插入、删除、替换函数使用示例
2013/07/25 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
2016/06/16 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
结合Vue控制字符和字节的显示个数的示例
2018/05/17 Javascript
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
javascript实现函数柯里化与反柯里化过程解析
2019/10/08 Javascript
JS获取表格视图所选行号的ids过程解析
2020/02/21 Javascript
微信小程序实现搜索框功能及踩过的坑
2020/06/19 Javascript
python实现爬虫下载美女图片
2015/07/14 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
python一行sql太长折成多行并且有多个参数的方法
2018/07/19 Python
TensorFlow 合并/连接数组的方法
2018/07/27 Python
Python基础学习之时间转换函数用法详解
2019/06/18 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
2020/02/03 Python
pycharm安装及如何导入numpy
2020/04/03 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
html5 兼容IE6结构的实现代码
2012/05/14 HTML / CSS
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
什么是会话Bean
2015/05/14 面试题
班主任工作经验材料
2014/02/02 职场文书
市场部管理制度
2014/02/02 职场文书
推荐信怎么写
2014/05/09 职场文书
禁止酒驾标语
2014/06/25 职场文书
中文专业自荐书
2014/06/29 职场文书
师德标兵事迹材料
2014/12/19 职场文书
初中政教处工作总结
2015/08/12 职场文书