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 相关文章推荐
静态的动态续篇之来点XML
Dec 23 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
Jan 11 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
Sep 01 Javascript
详解jQuery简单的表格应用
Dec 16 Javascript
详解angularjs结合pagination插件实现分页功能
Feb 10 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
Mar 15 Javascript
老生常谈javascript中逻辑运算符&amp;&amp;和||的返回值问题
Apr 13 Javascript
详解vue表单验证组件 v-verify-plugin
Apr 19 Javascript
在vue中获取token,并将token写进header的方法
Sep 26 Javascript
详解Vue用cmd创建项目
Feb 12 Javascript
JavaScript实现图片伪异步上传过程解析
Apr 10 Javascript
Vue 实现拨打电话操作
Nov 16 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
PHP4实际应用经验篇(6)
2006/10/09 PHP
php自定义函数截取汉字长度
2014/05/15 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
javascript dom 操作详解 js加强
2009/07/13 Javascript
jquery图片上下tab切换效果
2011/03/18 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
javascript的document中的动态添加标签实现方法
2016/10/24 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
解决IE7中使用jQuery动态操作name问题
2017/08/28 jQuery
js实现鼠标跟随运动效果
2020/08/02 Javascript
js字符限制(字符截取) 一个中文汉字算两个字符
2017/09/12 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
使用Vue 自定义文件选择器组件的实例代码
2020/03/04 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
vue+canvas实现拼图小游戏
2020/09/18 Javascript
分享8个JavaScript库可更好地处理本地存储
2020/10/12 Javascript
python抓取网页图片示例(python爬虫)
2014/04/27 Python
详细解析Python当中的数据类型和变量
2015/04/25 Python
Python获取指定文件夹下的文件名的方法
2018/02/06 Python
Python+Pandas 获取数据库并加入DataFrame的实例
2018/07/25 Python
django rest framework serializer返回时间自动格式化方法
2020/03/31 Python
CSS3中动画属性transform、transition和animation属性的区别
2016/09/25 HTML / CSS
澳大利亚百货公司:David Jones
2018/02/08 全球购物
澳洲国民品牌乡村路折扣店:Country Road & Trenery Outlet
2018/04/19 全球购物
J2EE中常用的名词进行解释
2015/11/09 面试题
电子商务个人职业生涯规划范文
2014/02/12 职场文书
2014年学习雷锋活动总结
2014/03/01 职场文书
公司任命书模板
2014/06/06 职场文书
私营公司诉讼代理委托书范本
2014/09/13 职场文书
2014-2015学年工作总结
2014/11/27 职场文书
先进工作者个人总结
2015/02/15 职场文书
心理健康教育培训研修感言
2015/11/18 职场文书