【问题标题】:Retrieve a rendered background image's dimensions with jQuery使用 jQuery 检索渲染的背景图像的尺寸
【发布时间】:2015-03-27 00:04:09
【问题描述】:

我有一个包含项目列表的页面,其中每个项目都有一个包含背景图像的方形 div。此图像的尺寸可以大于或小于 div 本身。背景居中并包含在 div 中,因此它始终显示在 div 的中间。 用于此的 css 如下:

    .productImage
    {
      width:  225px; 
      height: 225px; 
      background-size: contain;
      background-position: center center;
      background-repeat: no-repeat;
      margin-left:70px;
    }

背景图像本身是使用修改 div 的 css 的 jQuery 调用设置的。 这就像魅力一样,但是我想知道渲染背景图像的尺寸。如果渲染小于特定尺寸,出于美学原因,我想设置背景颜色。

我目前无法检索渲染图像的尺寸。我在循环中使用了以下代码来尝试检索图像的尺寸,但这会返回图像的 原始 尺寸,然后再将它们缩放到 div 中。

images[i] = new Image();
images[i].src = $('#image'+i).css('background-image').replace(/"/g,"").replace(/url\(|\)$/ig, "");
images[i].pos = i;

images[i].onload = function() {
var position = this.pos;
width = this.width;
height = this.height;

console.log("For image "+position+" the height is "+height+" and width is "+ width);
}

如何使用 jQuery 或纯 Javascript 找出渲染背景图像的尺寸?这甚至可能吗?

提前致谢。

【问题讨论】:

  • 我认为您可以通过检查包含元素的尺寸而不是背景图像本身来做到这一点,因为您将背景大小设置为contain
  • @Huangism 我也是这么想的,但是这会返回css中设置的225x225尺寸,而不是背景图像的实际尺寸。
  • 你的 bg 图片有多大?如果你的 div 是一个设定的宽度,那么你的 bg 也将是一个设定的宽度。 bg size contains 将图像的最大宽度或高度设置为 225,以先出现的为准。你应该能够根据它计算出尺寸
  • 嗯所以你基本上说的是它可能是一个选项来比较 bg 图像大小和 div 的尺寸,并根据它计算缩放尺寸?听起来很有道理,我试试看。谢谢!
  • 类似的东西,你需要知道实际的图像大小,既然你知道 div 的大小和实际的图像大小,你应该知道它什么时候用作 bg 并且包含 bg 大小,将将背景宽度或高度设置为 225。

标签: javascript jquery css image


【解决方案1】:

在玩弄了Huangism的想法后,我得出了以下解决方案:

                images[i] = new Image();
                images[i].src = $('#image'+i).css('background-image').replace(/"/g,"").replace(/url\(|\)$/ig, "");
                images[i].pos = i;

                images[i].onload = function() {
                    var position = this.pos;
                    width = this.width;
                    height = this.height;
                    var divwidth = $('#image'+position).width();
                    var divheight = $('#image'+position).height();
                    var ratioH = divheight / height;
                    var ratioW = divwidth / width;
                    var scaleW = width * ratioH;
                    var scaleH = height * ratioW;

                    console.log("For image "+position+" the height is "+height+" and width "+ width +" and ratioH "+ratioH + " and ratioW " + ratioW  +" (Scaled width: "+scaleW+")" );

                    if(scaleW < 120 || scaleH < 100){
                    $('#image'+position).css('background-color', 'red');
                    }
                }

此代码将用作背景图像的图像的高度和宽度与他所在的 div 的尺寸进行比较。基于此,我计算原始高度和宽度与 div 内的最大高度和宽度之间的缩放比例. 然后将该比率乘以相反的尺寸(高*宽比,宽*高比)来计算渲染图像的尺寸。

将控制台中的值与 Photoshop 中的测量值进行比较表明它们是完美匹配的!

我希望这个答案可以帮助其他想知道渲染背景图像尺寸的用户。

【讨论】:

    【解决方案2】:

    然后给图片一个id:

    var width = document.getElementById('myImageID').offsetWidth;
    var height= document.getElementById('myImageID').offsetHeight;
    

    【讨论】:

    • 如果图像实际上是一个图像元素,这将是一个很好的解决方案。但是,我正在使用带有背景图像元素的 div。我尝试了这种方法,它给了我 div 的尺寸而不是图像。
    • 啊,好吧,为什么不设置背景颜色呢?它要么显示图像更小,要么不显示(图像将覆盖它) - 无论哪种方式都希望得到结果
    • 产品图片实际使用的 div 后面有一个覆盖 div 的 logo。如果由于某种原因无法加载产品图片,则会显示其背后的 div 并显示徽标。如果我使用默认背景颜色,它总是会覆盖徽标。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多