【问题标题】:Resize image before it is loaded but after DOM is在加载之前但在 DOM 之后调整图像大小
【发布时间】:2015-03-13 20:16:32
【问题描述】:

我有一个高分辨率图像,我正在加载到一个页面中。默认情况下,它们都设置为小渲染(在这种情况下,最大宽度为 500 像素),但如果图像宽于高度,我希望将其渲染得更大,最大宽度为 900 像素。我想用一个脚本(我正在使用 jQuery)来做到这一点,因为我事先不知道图像尺寸是多少,也不能硬编码它们的最大宽度。我使用的是最大宽度而不是宽度,因为我不想过度拉伸小于 900 像素的图像。

在执行此操作时,我想在加载图像之前设置图像大小(因此它不会以原始大小闪烁然后变为新大小,在此过程中移动页面中的所有元素),但是在创建 DOM 之后(所以我可以访问它们的 naturalHeight 和 naturalWidth)。

这是我尝试过的:

<style>
img.portfolio {
  max-width: 500px;
}
</style>

<script>
$(document).ready(function(){
    $("img.portfolio").each(function(){ 
        if ($(this)[0].naturalHeight < $(this)[0].naturalWidth) {
          var ratio = $(this)[0].naturalHeight / $(this)[0].naturalWidth;
          $(this).css("max-width", 900);
          $(this).css("max-height", 900*ratio);
          $(this).width($(this)[0].naturalwidth);
          $(this).width($(this)[0].naturalheight);
        }
    });

});
</script>

但我发现这只有时有效!它似乎一直在 Chrome 中工作,但我注意到第一次在 Firefox 中加载页面时它无法工作,并且所有图像的宽度均为 500px,但随后的页面重新加载它将工作。我在 Firefox 中加载页面并关闭缓存,但它不起作用。为什么会这样?我如何解决它?为什么这是 Firefox 的问题,而不是 Chrome?


编辑 额外的谜团:我为这个问题做了一个fiddle,但我实际上无法在 Firefox 中重现该小提琴中的错误。什么!所以我在一个 tumblr 上做了一个例子,这就是我试图让这个脚本工作的地方。它是here,当我关闭浏览器缓存时,它有时会随机运行,并且在 Firefox 和 Chrome 中都无法运行。发生了什么?我怀疑这与 tumblr 如何呈现其模板有关。我该如何规避这种违规行为?

【问题讨论】:

    标签: jquery html css tumblr


    【解决方案1】:

    您可以简单地插入隐藏的图像(显示:无),在隐藏时调整它的大小,然后才使其可见。

    【讨论】:

    • 这将解决从一种尺寸到另一种尺寸的奇怪闪烁问题,但我仍然需要解决无法在 Firefox 中工作的问题。
    【解决方案2】:

    将 max-with 更改为宽度

      $(this).css("maxWidth", 900);
      $(this).css("maxHeight", 900*ratio);
    

    【讨论】:

    • 如果我确定图像的宽度或高度至少为 900 像素,这将起作用,但它们可以是任何宽度或高度,并且我不想拉伸图像,即为什么我使用最大宽度和最大高度。
    • jQuery 希望 css 元素是字符串,所以我尝试了你的答案,除了引号: $(this).css("maxWidth", 900); $(this).css("maxHeight", 900*ratio);虽然有同样的问题):
    • 这是关于 jQueryUI (jqueryui.com/resizable) 中可调整大小的讨论。我不希望我的图片可以调整大小,我想在加载时设置它们的大小。
    猜你喜欢
    • 1970-01-01
    • 2011-04-16
    • 2012-12-14
    • 2011-09-01
    • 2013-07-26
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多