缩略图不变形

需求:图片按九宫格展示,图片展示其缩略图(不变形),点击可看大图。(本文暂时只讨论展示缩略图不变形的方案)图片要求有两点:1.缩略,2.不变形。需要同时实现这两点,也就是图片的width和height中较小者应该完全显示,较大的截取中间的部分。如下图是这样:006tNbRwgy1fuiqmglq0aj30j407e3zt.jpg
而不是:
006tNbRwgy1fuiqqz7vzxj30j807ijx9.jpg
分析:想要根据图片的宽高来判断如果截取,需要图片load之后,在load之前要保证九宫格样式不乱,所以我在图片外面包了一层div,对div限制宽度和高度,并overflow:hidden

<div class="img-box">
    <img :src="pic.src" @load="curPic($event)">
</div>
<div class="img-box">
    <img :src="pic.src" @load="curPic($event)">
</div>
<div class="img-box">
    <img :src="pic.src" @load="curPic($event)">
</div>
.img-box{
    display: inline-block;
    width:33.3%;
    height:113px;
    overflow:hidden;
}
curPic(e) {
// 获取九宫格其中一格的宽高
    const width = document.getElementsByClassName('img-box')[0].offsetWidth;
    const height = document.getElementsByClassName('img-box')[0].offsetHeight;
    // 获取图片的宽高
    const realWidth = e.target.offsetWidth;
    const realHeight = e.target.offsetHeight;

    if (realWidth > realHeight) {
    // 如果图片width大于height,就将height完全展示,width按比例减小
       e.target.style.width = `${realWidth * (height / realHeight)}px`;
    } else {
    // 如果图片height大于width,就将width完全展示,height按比例减小
       e.target.style.height = `${realHeight * (width / realWidth)}px`;
    }
},

经过以上缩小,效果如下图

006tNbRwgy1fuirczogz6j30ks06wmyf.jpg

此时已经没变形了,但是展示的是左上角,不是为中间部分,接着对图片进行垂直水平居中即可

.img-box{
    display: inline-block;
    width:33.3%;
    height:113px;
    overflow:hidden;
    position: relative;
    img{
        position:absolute;
        top:50%;
        left:50%;
        transform: translate(-50%, -50%);
    }
}

此时就可以正确展示了~

转载于:https://www.cnblogs.com/youhong/p/9520355.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值