jquery - 在加载图像之前但在 DOM 之后调整图像大小

标签 jquery html css tumblr

我有一张正在加载到页面中的高分辨率图像。默认情况下,它们都设置为渲染较小(在本例中最大宽度为 500 像素),但如果图像宽度大于高度,我想将其渲染得更大,最大宽度为 900 像素。我想用一个脚本(我正在使用 jQuery)来做到这一点,因为我事先不知道图像的大小,也不能在它们的最大宽度中进行硬编码。我使用最大宽度而不是宽度,因为我不想过度拉伸(stretch)小于 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 中重现 fiddle 中的错误。什么!所以我在 tumblr 上做了一个例子,这就是我试图让这个脚本工作的原因。是here ,并且当我关闭浏览器缓存时,它有时会在 Firefox 和 Chrome 中随机工作并且不工作。发生了什么?我怀疑这与 tumblr 呈现其模板的方式有关;我该如何规避这种违规行为?

最佳答案

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

关于jquery - 在加载图像之前但在 DOM 之后调整图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29041179/

相关文章:

php - 从一行中选择一个单选按钮并从该行获取其他输入字段的值

javascript - 数据表 Colvis 响应式

php - 堆叠多个粘性元素

javascript - 检查/更改背景位置

java - 使用 jQuery 插件显示 Spring 验证错误

javascript - 根据类和数据属性选择 CSS 网格最后一行中的元素

javascript - 诊断菜单(如 IFTTT)

javascript - 如何制作在两种颜色之间切换的按钮?

javascript - Div 不会停止滚动页面

html - 占位符 CSS 调用问题