关于页面上传文件预览图片的两种Demo

19 篇文章 0 订阅
9 篇文章 0 订阅

目的

在选择文件后,出现图片预览效果

初始界面:
在这里插入图片描述
效果如下:
在这里插入图片描述

思路

  1. 监听
  2. 获取文件信息
  3. FileReader()对象,初始化文件,输出所需的文件地址
  4. 添加dom,将处理过的图片地址赋值给src,显示图片

FileReader代码步骤

  1. 监听文件上传框(onchange),发生改变时,获取上传文件的信息(dom.files)
<body>
    <div id="a1">
        <div id="a2">
            <input type="file" id="a3" onchange="es(this)">
        </div>
    </div>
</body>
<script>
    let a = document.querySelector("#a1")
    let b = document.querySelector("#a2")
    let c = document.querySelector("#a3")
    function es(_this){
    	let fileslist = _this.files
        console.log(_this.files)
    }
</script>
  1. FileReader对象读取需要的文件,并异步转为base64格式
function es(_this){
    	let fileslist = _this.files
        console.log(_this.files)
        let reader = new FileReader()
        reader.readAsDataURL(fileslist[0]) 
}

个人理解,使用readAsDataURL()就是相当于将文件与FileReader对象关联在一起,初始化,没有进行readAsDataURL(),则关于FileReader对象的各属性及方法是无效的

使用readAsDataURL()会异步产生一个result,存入实例中(实例中本来是没有的),让我们验证下:

let reader = new FileReader()
        console.log("1"+reader.result)
        reader.readAsDataURL(fileslist[0]) 
        console.log("2"+reader.result)
        reader.onload = function(e){
            console.log("3"+reader.result) 
        }

输出:
在这里插入图片描述
所以我们获取result需要在onload()中进行,onload()是在readAsDataURL()后执行的。

  1. 添加dom,并加入到文档中
	let img = new Image()
    img.src = reader.result
     b.appendChild(img);

FileReader代码demo

function es(_this){
        let fileslist = _this.files
        let reader = new FileReader()
        reader.readAsDataURL(fileslist[0]) 
        reader.onload = function(){
            let img = new Image()
            img.src = reader.result
            b.appendChild(img);
        }
}

createObjectURL(obj)实现

obj_url = window.URL.createObjectURL(obj)

方法:调用window.URL.createObjectURL(),传入files,则输出一个图片地址,在添加img dom时赋值给src也可以正常使用~

window.URL.createObjectURL代码实现

...
window.URL = window.URL || window.webkitURL;
const img = document.createElement("img");
img.src = window.URL.createObjectURL(files[0])
b.appendChild(img)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值