【问题标题】:jQuery check if image already loaded before binding a .load() event [duplicate]jQuery在绑定.load()事件之前检查图像是否已经加载[重复]
【发布时间】:2015-01-14 20:28:34
【问题描述】:

我有一个用于 jQuery 的 Coverflow 插件,它应该可以调整为一系列图像中最高的图像。

目前它在每个图像上使用.load() 绑定,并在计数器指示所有图像已加载后调整插件。不过,有人告诉我,这在所有浏览器上并不可靠。

通常,这些图像中的大多数已经加载到浏览器缓存中,因此.load() 绑定被触发的次数比必要的要多。

为了减少开销,我想通过仅对尚未加载的图像使用 .load() 绑定来尽可能减少 .load() 绑定的数量。

如何区分已经加载的图片和尚未加载的图片?

【问题讨论】:

  • 如何使用本地存储,跟踪任何服务器更新(新图像或其他任何东西,并使用一些逻辑服务器端)来检查旧图像是否已经在缓存中?无论如何,请参阅:stackoverflow.com/questions/7844982/…
  • 不完全重复;另一个问题假设这个问题的答案是已知的。
  • 另一个答案与您在 Guffa 答案中有趣的评论中使用的逻辑完全相同(即使处理 complete 属性可能成为问题的旧浏览器)。对不起,如果我错过了什么,但很确定它是重复的,否则,我的错
  • 重点是;如果您正在寻找一种方法来查看图像是否已加载并且您不知道complete,您会找到另一个问题吗?我没有。
  • 是的,即使我发现它没有使用完整的特定词:谷歌中的“检查图像缓存 javascript”。将问题标记为重复并不意味着问题无用或不好

标签: jquery image events filter load


【解决方案1】:

在绑定事件之前检查图片的complete属性。示例:

var img = $('.someImage');
if (img.prop('complete')) {
  // already loaded
} else {
  img.load(function(){
    // now it has loaded
  });
}

【讨论】:

  • img.prop('complete') 仅适用于第一个匹配的元素
  • 我最终得到了类似$('img').filter(function() { return !$(this).prop('complete'); }).load(...); 的东西,它似乎工作得很好。节省大约三分之一的重复计算。
  • @A.Wolff:是的,代码只处理一张图片,我希望答案没有给人留下任何其他印象。
  • @Guffa 当我看到一个类选择器时,我总是有一种“印象”,期望不止一个元素,这确实是我的坏事:)
猜你喜欢
  • 2011-08-29
  • 2016-01-20
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
相关资源
最近更新 更多