原生JS实现上传图片预览效果

先看效果图 

一、直接展示上传的图片

CSS代码:

#previewImg {
    position: relative;
    width: 80px;
    height: 80px;
    line-height: 80px;
    border: 1px dashed rgb(0, 0, 0, .5);
    text-align: center;
    cursor: pointer;
}
        
#previewImg:hover {
    border: 1px dashed rgb(0, 0, 0);
}

#previewImg p {
    width: 100%;
    margin: 0;
}
        
#fileInp {
    position: absolute;
    top: 0;
    left: 0;
    z-index: 5;
    width: 100%;
    height: 100%;
    cursor: pointer;
    opacity: 0;
}
        
#fileImg {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
}

HTML代码:

<div id="previewImg">
     <input type="file" id="fileInp">
     <img src="" alt="111" id="fileImg">
     <p>上传图片</p>
</div>

JS代码:

let inp = document.getElementById('fileInp');
let fileImg = document.getElementById('fileImg');
inp.onchange = function() {
    let inpObj = inp.files[0]; // 拿到上传文件的属性
    // inpObj.size 上传文件的大小(字节数)
    // inpObj.type 上传文件的类型   例如:image/png
    if (inpObj.type !== "image/png") {
        alert('上传的不是png/jpg类型的图片')
    } else if (inpObj.size / 1024 / 1024 > 2) {
        alert('上传的图片超过2MB')
    } else {
        let windowURL = window.URL || window.webkitURL;
        let img = document.getElementById('preview');
        if (inp && inpObj) {
            // createObjectURL(inpObj)  创建一个文件的临时地址
            let dataURL = windowURL.createObjectURL(inpObj);
            fileImg.setAttribute('src', dataURL);
            fileImg.style.opacity = 1
         }
    }
}

二、将图片转换成base64,再上传

CSS、HTML代码同上

JS代码

let inp = document.getElementById('fileInp');
let fileImg = document.getElementById('fileImg');
inp.onchange = function() {
    let inpObj = inp.files[0]; // 拿到上传文件的属性
    // inpObj.size 上传文件的大小(字节数)
    // inpObj.type 上传文件的类型   例如:image/png
    if (inpObj.type !== "image/png") {
        alert('上传的不是png/jpg类型的图片')
    } else if (inpObj.size / 1024 / 1024 > 2) {
        alert('上传的图片超过2MB')
    } else {
        let windowURL = window.URL || window.webkitURL;
        let img = document.getElementById('preview');
        if (inp && inpObj) {
            // createObjectURL(inpObj)  创建一个文件的临时地址
            let dataURL = windowURL.createObjectURL(inpObj);
            toBase64(dataURL);
         }
    }
}
function toBase64(imgSrc) {
    var canvas = document.createElement("canvas");
    canvas.width = 320;
    canvas.height = 320;
    let context = canvas.getContext("2d");
    context.rect(0, 0, canvas.width, canvas.height);
    context.fillStyle = "#fff";
    context.fill();

    let myImage = new Image();
    myImage.src = imgSrc; //背景图片  你自己本地的图片或者在线图片
    myImage.crossOrigin = 'Anonymous';
    let base64 = null;
    myImage.onload = () => {
        context.drawImage(myImage, 0, 0, 320, 320);
        base64 = canvas.toDataURL("image/png");

        // 等图片转换成base64之后 更新图片
        fileImg.setAttribute('src', base64);
        fileImg.style.opacity = 1
    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值