最近开发的性能,图片不被裁切的展现在父盒子中并且不超过父盒子的宽高,如果图片宽高小于父盒子宽高,则原尺寸展现。上面是代码:

<!DOCTYPE html><html><head>    <meta charset="utf-8">    <title>图片等比压缩适应父盒子宽高,并且不被裁切</title>    <script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>    <style>        * {            margin: 0;            padding: 0;        }        .logo-wrap {            background-color: rgba(0, 0, 0, 0.5);            width: 375px;            height: 200px;            overflow: hidden;            display: flex;            justify-content: center;            align-items: center;            position: relative;        }    </style></head><body>    <div id="app">        <!-- 父盒子的宽高 375  200 -->        <div class="logo-wrap">            <img class="logo" ref="logo" :src="imgsArr[1]" alt="">        </div>    </div>    <script>        new Vue({            el: '#app',            data() {                return {                    imgsArr: [                        'imgs/1.png',                        'imgs/2.jpg',                        'imgs/3.png',                        'imgs/4.png',                        'imgs/5.jpg',                    ],                    // 通过等比压缩后的图片宽度                    width: '',                    // 通过等比压缩后的图片高度                    height: '',                }            },            mounted() {                let that = this;                let width = '';                let height = '';                // 创立实例对象                var img = new Image();                // 图片地址                img.src = this.imgsArr[1];                // 为什么要写 onload  是因为要等他加载完之后能力获取到图片宽高,                 // 间接通过this.$refs.logo.offsetWidth 获取图片的宽高是0                img.onload = function () {                    // 返回的宽高是元素的理论大小                    width = img.width;                    height = img.height;                    // 图片的宽高比                    let ratio = width / height;                    // 父盒子的宽高比                    let bili = 375 / 200;                    // 只有图片宽或者高大于父盒子对应的宽高才会执行,否则就展现原图的尺寸                    if ((width >= 375 && height <= 200) || (width >= 375 && height >= 200) || width <= 375 && height >= 200) {                        // 阐明图片最大的尺寸是宽度                        if (ratio > bili) {                            height = Math.round(375 / width * height);                            width = 375;                            console.log('走1')                        } else {                            // 阐明图片最大的尺寸是高度                            width = Math.round(200 / height * width);                            height = 200;                            console.log('走2')                        }                        // 图片宽高相等的状况                    } else if (width == height && height >= 200) {                        width = height = 200;                        console.log('走3')                    };                    that.width = width;                    that.height = height;                    console.log(width, height, '解决过后的图片宽高');                    that.$refs.logo.style.width = that.width + 'px';                    that.$refs.logo.style.height = that.height + 'px';                }            },        })    </script></body></html>

要留神this.$refs.logo.offsetWidth 获取动静图片的宽高是0,须要用img.onload办法。
成果:

这就是我的总结。