zoukankan      html  css  js  c++  java
  • 缩略图不变形

    需求:图片按九宫格展示,图片展示其缩略图(不变形),点击可看大图。(本文暂时只讨论展示缩略图不变形的方案)图片要求有两点:1.缩略,2.不变形。需要同时实现这两点,也就是图片的width和height中较小者应该完全显示,较大的截取中间的部分。如下图是这样:
    而不是:

    分析:想要根据图片的宽高来判断如果截取,需要图片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;
    	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`;
        }
    },
    
    

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

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

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

    此时就可以正确展示了~

  • 相关阅读:
    40.广搜练习:洪水
    40.广搜练习:洪水
    39.递推练习:   菲波那契数列(2)
    39.递推练习:   菲波那契数列(2)
    39.递推练习:   菲波那契数列(2)
    21世纪的信息化与20世纪的自动化
    一个文件夹就是一个信息系统
    团队的建设是部门管理目标的核心
    信息共享的另一种形式--复用
    如何工作体会
  • 原文地址:https://www.cnblogs.com/youhong/p/9520355.html
Copyright © 2011-2022 走看看