【问题标题】:jQuery IE doesn't fire load eventjQuery IE 不会触发加载事件
【发布时间】:2013-02-27 09:34:21
【问题描述】:

在加载图像后显示图像时遇到问题。我想要的效果是在图像后面显示一个正在加载的 .gif,当它加载时淡入。以下代码适用于我通过 AJAX 加载的任何图像,但是在页面加载时我想要相同的效果。

$(function() {
    $("#products img").hide().bind("load", function() {
        $(this).fadeIn(300);
    });
});

注意,这在除 IE 之外的所有浏览器中都能正常工作(仅测试 9)。据我了解,它不会触发load 事件,因为图像已缓存或图像已在事件绑定之前加载。我希望浏览器缓存图像,因此在图像 src 的末尾添加日期/时间戳并不是一个真正的选择。

我可以说If the image is already loaded in some form or another, show it. Otherwise hide it and fade it in once it's loaded.吗?

编辑:我尝试设置一个小提琴,但它并不喜欢它。 Here it is anyway if it's helpful

编辑

如果有人对这两个答案感兴趣I've put up a quick js performance test
(来源:grabilla.com

【问题讨论】:

  • 在这里似乎不起作用(chrome/ff)
  • 是的,看起来 jsfiddle 遇到了与 IE 相同的问题。
  • 还可以在此处阅读“与图像一起使用时加载事件的注意事项”api.jquery.com/load-event
  • 只有一件事:不是第一个总是在图像中消失,而第二个不是只有一次(并且只有在图像尚未加载时才会这样)?
  • $("#products").find('img') 选择器将使其速度提高 1.5 到 3 倍,因为它不会使用嘶嘶声

标签: jquery load internet-explorer-9


【解决方案1】:

我遇到了同样的问题并这样解决了:

 $("#products img").one('load.FadeIn', function () {
     $(this).fadeIn(300);
 });

 $("#products img").trigger('load.FadeIn');

要么图像已经加载并淡入,要么我们手动触发事件。

【讨论】:

  • 很好地使用了.one()。似乎是一个很棒的解决方案,而且非常简单。
  • fyi,喜欢这个解决方案,但选择了另一个答案,因为代码运行得更快。每一点都有帮助。还是你!
  • 你仍然可以在我猜的另一种解决方案中使用一个而不是绑定,不应该更快,但会使用更少的内存
【解决方案2】:

您可以添加一个过滤器,仅通过尚未加载的图像:

$("#products img")
  .filter(function(i, img) { return ! img.complete })
  .hide()
  .bind("load", function() {
    $(this).fadeIn(800);
  });

demo

【讨论】:

  • 太棒了。认为我会使用此解决方案,因为它似乎比其他答案更快。 Did a quick jsperf test to compare the two answers 而你的似乎更快。
  • 哇...!你从哪里得到img.complete?我是说你怎么知道的?有参考吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
相关资源
最近更新 更多