javascript - Background Size : Contain, 缩放后得到Size

标签 javascript jquery html css

在 CSS 中,我将按钮设置为 100px x 100px 并设置了背景大小:包含;

在 javascript 中,我将图像应用于我没有高度/宽度(也没有纵横比)的元素。

在 javascript 的另一个函数中,我需要能够在通过包含函数后获取此按钮的图像/背景的大小。

有什么办法可以做到这一点(我也可以访问 Jquery)

小样本:

<style>
#imageButton{ 
    width: 100px;
    height: 100px;
    background: url("imageURL"); 
    background-size: contain !important; 
}
</style>
<script>
    var imageElem = $('#imageButton')[0];
    console.log($(imageElem).width());
    //100px but need width of image after scaling

</script>

最佳答案

CSS 属性 background-size: contain; 将图像缩放到最大,以便高度和宽度都适合内部,当然保持相同的纵横比。

正如@Teemu 所说,背景图像是一种您实际上无法引用的伪元素。但我可以向您展示如何获取真实图像大小和计算缩放后的背景图像大小的解决方法。

它的工作原理类似于比率和比例,其中:

real_image_widthreal_image_height 因为 resized_image_widthresized_image_height

首先我们需要得到图片的真实尺寸:

var img = new Image;
img.src = $('#imageButton').css('background-image').replace(/url\(|\)$/ig, "");
var imgW = img.width;
var imgH = img.height;

然后,比较哪个维度最大,计算比例:

var newW, newH;

if(imgW > imgH){
    newW = $('#imageButton').width(); //100;
    newH = imgH / imgW * newW;
}else{
    newH = $('#imageButton').height(); //100
    newW = imgW / imgH * newH;      
}

console.log(newW+':'+newH);

如果图像尚未加载或缓存,它将返回大小为 0,解决此问题的一个好方法是使用 .load() 获取图像加载后的大小功能。

浏览器在子像素渲染方面也有所不同,我认为您需要四舍五入到最接近的小数点后 .5 位以获得最安全的准确值 (43.7832 => 43.5)。使用:(Math.round(value * 2)/2).toFixed(1)

就是这样!这是样本 fiddle .

关于javascript - Background Size : Contain, 缩放后得到Size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20011685/

相关文章:

javascript - PHP 执行时 <a> 链接到其他页面

javascript - HTML DOM 元素是否通过引用存储在 Javascript 数组中?

jquery - 尝试使用 jQuery 隐藏 html 表的列

javascript - 跟踪 pagesource 中发现的 javascript

javascript - Meteor 中的动态加载模板

javascript - Highcharts 类别错误?

javascript - 除了一条路由之外,所有路由都使用基本名称子目录吗?

php - 如何将 php 变量添加到此 jquery url 设置?

javascript - 这是一个错误吗? jquery的append方法在IE浏览器上工作,纯值类型long会转换吗?

javascript - 在 div 中打开一个 anchor 链接