JavaScript实现未知尺寸的img图片自适应
@源自本人知乎。 https://zhuanlan.zhihu.com/p/37566352
针对未知宽高的图片进行等比例缩放,防止图片拉伸。
使用img标签好处是可以使用onerror来判断图片是否加载成功。
使用方法:
对应img标签添加class 'zoom-logo',其父级添加class 'zoom-log-box'
1、 默认效果:把图像图像扩展至最大尺寸,以使其宽度和高度完全适应内容区域。
2、 图片完全覆盖父级区域效果:添加data-zoom-reverse属性(大于1或其他任何字符串)
ps:相同于background-size里的contain和cover属性
HTML:
<div class="zoom-logo-box">
<img class="zoom-logo" data-zoom-reverse="1" height="250" width="250"
src="https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1198051195,4103555956&fm=27&gp=0.jpg">
<!-- 宽图链接 https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1079062170,1691309451&fm=27&gp=0.jpg -->
</div>
CSS:
.zoom-logo-box{
margin: 100px auto;
width: 250px;
height: 250px;
overflow: hidden;
position: relative;
display: flex;
align-items: center;
justify-content: center;
background: #fff;
}
.zoom-logo{
position: absolute;
/*left: 50%;
transform: translateX(-50%);*/
}
JS
function zoomLogo() {
$.each($('.zoom-logo'), function () {
var that = $(this);
var src = that.attr('src');
if (src && src != '') {
var reverseType = that.attr('data-zoom-reverse');
var img = new Image();
img.src = src;
img.onload = function(){
var removeAttr = img.width >= img.height ? (reverseType ? 'width' : 'height') : (reverseType ? 'height' : 'width');
that.removeAttr(removeAttr);
};
}
});
}
zoomLogo();