【问题标题】:Showing images after they are loaded加载后显示图像
【发布时间】:2025-12-30 01:15:11
【问题描述】:

我正在寻找解决方案来解决我在加载图像后在网站上显示图像的想法。当它们没有加载时,我想隐藏它们,但在它们应该放置的地方留出空间。

我需要在加载图像时显示它们,因为现在它们以不好看的方式加载。

我尝试过这样的事情:

$(document).ready(function(){
    $('img').css('opacity' , '0');
});

$('img').load(function(){
    $(this).css('opacity', '1');
});

Css 通过以下方式提供不透明动画:

img{
   transitions: all 2s;
}

我正在寻找其他解决方案,但没有发现任何有趣的东西,谢谢大家的帮助。

【问题讨论】:

  • 你说的“不好看”是什么意思?你能提供一些截图吗?
  • 我有大约 20 张图片,它们在不同的时间加载了很长时间,这对我来说是“坏的”。我希望在完全加载后看到平滑的图像。现在图像正在“逐行”加载,类似于打印图像。
  • transition 不是transitions。此外,如果您使用的是最新版本的 jQuery,它应该是 $('img').on('load', function(){ ... })

标签: jquery css


【解决方案1】:

首先用 CSS 将 opacity 设置为 0,然后用 jquery 将 opacity 设置为 1 或使用 jquery show 或 fadeIn。

styles.css

  img{
      opacity: 0;
  }

scripts.js

  $( document ).ready(function() {
      $('img').css('opacity' , '1');
      // $('img').show("slow");
      // $('img').fadeIn("slow");
  });

https://api.jquery.com/show
https://api.jquery.com/fadein

【讨论】:

  • doc.ready 可以在图像加载之前触发。 OPs 使用图片的加载事件的方法更合适。
【解决方案2】:

首先,它应该是transition 而不是transitions

如果您希望在页面加载时隐藏图像,请不要等待 document.ready 事件将不透明度设置为零。在你的 CSS 中设置它。

如果您使用的 jQuery 版本大于 3(您应该是),那么您需要使用 .on() 来绑定您加载的事件处理程序。

$('img').on('load', function(){
    $(this).css('opacity', '1');
});
img {
  opacity: 0;
  transition: all 2s;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>

<img src="https://placehold.it/1000x1000">

【讨论】:

  • 我按照你的建议做了,但是有一些问题。当我第一次访问网站时(或者当我通过 Ctrl+Shift+R 强制 Google Chrome 重新加载文件时)图像在页面上精美地显示,但是当我再次访问该网站时(或者当我使用 F5 刷新时)图像保持透明(显示它们的代码未启动)。我修改了这样的代码:$('img').on('load', function(){ $(this).css('opacity', '1'); console.log('working!'); }); 第一次日志显示在控制台中,下次没有日志,直到我强制重新加载(Ctrl+Shift+R)
  • 这将是由于图像是从缓存中加载的。这里有一些解决方案:*.com/questions/5624733/… 和这里:*.com/questions/4279135/…