现在,在实现前端图片即时预览,可以说是一件很简单的事情了。
我们只需要用file对象和FileReader对象,既可以轻松实现,无需下载类库。
先来说说input,input这个元素,具有一个files属性,该属性是一个filelist对象,是file对象的集合。
你可以通过input.files[0]的语法形式拿到这个file对象,不过遗憾的是,这个对象仅仅包含了用户选择的文件的相关信息,如文件名,大小,类型,最后修改时间等,并不直接提供文件的数据。
所以,我们要使用另一个对象FileReader来读取到用户选择的文件的数据
我们初始化一个FileReader对象
这是一个初始化完成的FileReader对象具有的一些属性和支持的事件
类似于Ajax,FileReader提供了readyState来查看读取的状态,不过并没有什么卵用
因为FileReader还提供了onloadend这样的事件,来处理数据读取完成后该干些什么,onprogress是最有趣的,只要在读取数据,那么这个事件会被不停的触发,可以实现那种进度条效果。
还有一个极其重要的属性result,初始化完成时,该值是null,当读取数据后,该值就是所获得的数据。
接下来,我们就可以使用这个对象读取用户选择的图片了,没有错就是这么简单
当用户选择了某一个文件时,就会在input上触发change事件,这意味着我们可以开始读取数据了
readASDateURL这个方法,可以读取一个file对象,并把数据以base64的格式填充到FileReader对象中的result属性中去。
当数据读取完毕,就会触发onloadend事件,在这个事件中,就可以把数据填到img标签中去
完整版代码