您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

javascript图片上传预览的实现方法(附源码)

2025/11/30 13:50:13发布28次查看
本篇文章给大家带来的内容是关于php协成实现的详解(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
hello,大家好,游戏开始了,欢迎大家收看这一期的讲解。本次的内容是图片的上传预览。最后发源码链接。
废话不多说,先上图。
待上传图像
点击蓝色框内,pc可以选择文件,移动端选择拍照或选择图片进行上传。
html部分
<div class="img-box">    <div class="card-box">        <div class="default-box" >            <img class="default-img" src="./cardfactory.png" alt="">            <div class="default-title">请点击</div>            <img class="add-img" src="./add.png" alt="">        </div>        <div class="up-img" id="upimg"></div>        <input type="file" id="addimg" class="upimg-btn">    </div></div>
.default-box这层就是加号图像
up-img是转码后显示图像的地方。
下面input是选择图像的地方。
css
        .img-box {            display: flex;            justify-content: center;            align-items: center;        }        .card-box {            width: 7.5rem;            height: 4rem;            border: solid .04rem #23a7fe;            border-radius: 4px;            box-sizing: border-box;            position: relative;        }        .upimg-btn {            width: 100%;            height: 100%;            opacity: 0;            position: absolute;            top: 0;            left: 0;        }        .up-img {            width: 5.58rem;            height: 3.12rem;            margin: .2rem .6rem;            position: absolute;            top: .2rem;            left: 0;            background-repeat: no-repeat;            background-position: center center;            background-size: cover        }        .default-box {            position: absolute;            top: 0;            left: 0;            bottom: 0;            right: 0;        }        .add-img {            position: absolute;            top: 50%;            left: 50%;            margin-left: -.64rem;            margin-top: -.64rem;            width: 1.28rem;            height: 1.28rem;        }        .default-img {            position: absolute;            padding: 0 1.1rem;            bottom: .68rem;            box-sizing: border-box;            width: 100%;            opacity: .5;        }        .default-title {            position: absolute;            width: 100%;            bottom: .12rem;            text-align: center;            color: #23a7fe;            font-size: .32rem;        }
内部就是定位了。
页面js
    document.queryselector(#addimg).addeventlistener(change,function () {        changeimg({            id:addimg,           //input的id   必须            imgbox:'upimg',        //显示位置id   必须            limittype:['jpg','png','jpeg'],   //支持的类型   必须            limitsize:819200          //图片超过多大开始进行压缩    可不传        });    });
我们监听input的change时间,然后传入参数dshowimg64.js代码
     //id,limittype,limitsize    function changeimg(obj = {}) {                                  if(!obj.id) return;        if(!obj.limittype)return;        var dom = document.queryselector(#+obj.imgbox);        var files =  document.queryselector(#+obj.id).files[0];        var reader = new filereader();        var type = files.type && files.type.split('/')[1];           //文件的类型,判断是否是图片        var size = files.size;         //文件的大小,判断图片的大小        if (obj.limittype.indexof(type) == -1) {            alert('不符合上传要求');            return;        }        //判断是否传入限制大小。压不压缩。        var limitsize = obj.limitsize ? parseint(obj.limitsize) : 0;        if (size < limitsize) {            reader.readasdataurl(files);              // 不压缩,直接转base64            reader.onloadend = function () {                dom.style.backgroundimage = url(+this.result+);                //如果要上传的话,在这里调用ajax                document.queryselector(.default-box).style.display = none;            }        } else {                                     //压缩            var imageurl = this.getobjecturl(files);      //创造url            this.convertimg(imageurl, function (base64img) {   //调用压缩函数                dom.style.backgroundimage = url(+base64img+);                //如果要上传的话,在这里调用ajax                document.queryselector(.default-box).style.display = none;            }, type)        }    }    function convertimg(url, callback, outputformat) {        var canvas = document.createelement('canvas');  //绘制canvas        var ctx = canvas.getcontext('2d');        var img = new image;            //初始化图片        img.crossorigin = 'anonymous';        img.onload = function () {            var width = img.width;            var height = img.height;            // 按比例压缩2倍       //设置压缩比例,最后的值越大压缩越高            var rate = (width < height ? width / height : height / width) / 2;            canvas.width = width * rate;            canvas.height = height * rate;           //绘制新图            ctx.drawimage(img, 0, 0, width, height, 0, 0, width * rate, height * rate);                                               //转base64            var dataurl = canvas.todataurl(outputformat || 'image/png');            callback.call(this, dataurl);   //回调函数传入base64的值            canvas = null;        };        img.src = url;    }    function getobjecturl(file) {     //创造指向该图的url        var url = null;        if (window.createobjecturl != undefined) {  //大部分执行这个            url = window.createobjecturl(file);        } else if (window.url != undefined) {       // 兼容            url = window.url.createobjecturl(file);        } else if (window.webkiturl != undefined) { // 兼容            url = window.webkiturl.createobjecturl(file);        }        return url;    }
首先获取各种属性如类型、大小
判断图片是否小于限制大小、小于的话直接转base64,大于的话 利用canvas 进行缩小完成压缩后转base64 然后将得到的值设置为背景图。然后隐藏add的样式。
最后的预览图像
git地址:https://github.com/zhoujiando...
以后会加入更多的小插件。 最后祝大家身体健康,谢谢。
以上就是javascript图片上传预览的实现方法(附源码)的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product