在此示例中: Fiddle Example
我有一个尺寸为835x470
的{{3}},该图像被添加到2个元素中,一个隐藏的<img>
,并作为<div>
宽度类{{1 }},我将屏幕上的wrapper
尺寸设置为较小的尺寸<div>
。
519x220
上有一个居中的圆形元素,其尺寸为<div>
,我想将这些尺寸设置为与图像从100x100
变为835x470
的比例相同
例如,如果原始图像519x220
上的圆为835x470
,则当200x200
尺寸设置/更改为<div>
时,该圆将采用相同的原始图片上占用的空间519x220
。
因此,如果200x200
代表200x200
,例如15%
,则圆将从新维度835x470
取相同的15%
>
我想做的是获得图像519x220
的自然尺寸,并获得图像835x470
的新尺寸,然后将每个尺寸相除以获得比率,然后检查以得到最小比例(不要使圆超出图像范围),然后将该比例乘以519x220
并将其设置为图像的200
和width
。
代码如下:
height
//Get natural dimensions from the hidden image.
var imgNaturalHeight = document.getElementById('img').naturalHeight,
imgNaturalWidth = document.getElementById('img').naturalWidth,
//Get new dimensions from the wrapper that has the image as a background.
imgNewHeight = document.querySelector('.wrapper').height,
imgNewWidth = document.querySelector('.wrapper').width,
//Get height and width ratios.
widthRatio = imgNewWidth / imgNaturalWidth,
heightRatio = imgNewHeight / imgNaturalHeight,
//Define ratio variable.
ratio;
//Set ratio to the smallest ratio.
if ( widthRatio < heightRatio ) {
ratio = widthRatio;
}else{
ratio = heightRatio;
}
//The new value for width and height
var fixed = ratio * 200;
//Set the new width and height of the circle.
document.querySelector('.overlay').style.width = fixed;
document.querySelector('.overlay').style.height = fixed;
.wrapper{
position: relative;
background: url('https://raw.githubusercontent.com/fengyuanchen/cropperjs/master/docs/images/picture.jpg');
height:220px;
background-repeat: no-repeat;
background-size: 100%;
}
.overlay{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
background: rgba(0,0,0,0.4);
border-radius: 50%;
width: 100px;
height: 100px;
}
.image{
display:none;
}
我希望我说清楚了。
答案 0 :(得分:0)
因此它所占用的空间与原始图像上的空间相同,为200x200。
尝试执行以下步骤:
这应该可以解决问题。
有一些例子(也许不完全是您的情况,但我希望您可以轻松地进行调整)。
注意:我不太确定您尝试使用纯JS实现什么,所以我使用了clientHeight
属性,您可以在Height and width in JS此处了解其他可能性
答案 1 :(得分:0)
//Get natural dimensions from the hidden image.
var imgNaturalHeight = document.getElementById('img').naturalHeight,
imgNaturalWidth = document.getElementById('img').naturalWidth,
//Get new dimensions from the wrapper that has the image as a background.
imgNewHeight = document.querySelector('.wrapper').clientHeight,
imgNewWidth = document.querySelector('.wrapper').clientWidth,
//Get height and width ratios.
widthRatio = imgNewWidth / imgNaturalWidth,
heightRatio = imgNewHeight / imgNaturalHeight,
//Define ratio variable.
ratio;
//Set ratio to the smallest ratio.
if ( widthRatio < heightRatio ) {
ratio = widthRatio;
}else{
ratio = heightRatio;
}
//The new value for width and height
var fixed = ratio * 200;
//Set the new width and height of the circle.
document.querySelector('.overlay').style.width = fixed + "px";
document.querySelector('.overlay').style.height = fixed + "px"