【问题标题】:Do something if an image is not loaded (jquery)如果未加载图像,请执行某些操作(jquery)
【发布时间】:2012-02-14 11:19:48
【问题描述】:

我希望在访问者到达网站时淡入背景图像,但当他们已经在缓存中获得该图像时不会。类似这样的东西:

  1. 检查背景图像是否已在缓存中。
  2. 如果是则显示它。
  3. 如果不是,则将其隐藏,并在加载时将其淡入。

使用 jQuery 我可以隐藏它,然后在它加载时淡入:

$("#bkg img").hide();

$('#bkg img').load(function() {  
 $(this).fadeIn();  
});

但是我如何设置这个条件,以便只有在图像没有已经缓存时才会发生?

我在论坛上找到的所有内容都会在图片加载完成时触发。我怎样才能让它因为它没有加载而触发?

感谢您的帮助, 学习

@Sima 基于that other thread 的代码,我已经做到了以下几点——但它似乎没有任何效果。如果你能看到我哪里出错了,那就太好了:

var storage = window.localStorage;
if (!storage.cachedElements) {
 storage.cachedElements = "";
}

function logCache(source) {
 if (storage.cachedElements.indexOf(source, 0) < 0) {
  if (storage.cachedElements != "") 
  storage.cachedElements += ";";
        storage.cachedElements += source;
    }
}

function cached(source) {
    return (storage.cachedElements.indexOf(source, 0) >= 0);
}

var plImages;

//On DOM Ready
$(document).ready(function() {
    plImages = $("#fundo-1 img");

    //log cached images
    plImages.bind('load', function() {
        logCache($(this).attr("src"));
    });

    //display cached images

    plImages.each(function() {
     var source = $(this).attr("src")
     if (!cached(source)) {
        $(this).hide().fadeIn();
     }
    });

});

【问题讨论】:

    标签: jquery image load onload


    【解决方案1】:

    你可以试试:

    if(!$('#bkg img')[0].complete) {
        $('#bkg img').hide().load(function () {  
            $(this).fadeIn();  
        });
    }
    

    https://developer.mozilla.org/en/DOM/HTMLImageElement

    【讨论】:

    • 别忘了先到.hide()它(在if里面)。 :)
    • 是的,刚刚编辑了。该死的,漫长的一天和一周,周五带来。
    • 这对我不起作用。感谢您对 .complete 的引用 - 我对此并不熟悉。也许使用 jQuery 选择器不起作用。我将如何选择使用直接的 javascript?
    • document.getElementById("bkg") - 但我很确定这不是它不起作用的原因。
    • 另外,请检查此线程:@Sima 指出的stackoverflow.com/questions/2446740/…
    【解决方案2】:
    $("#bkg img").hide();    
    var imgCount=$("#bkg img").length;
    $('#bkg img').load(function(){
        if(!--imgCount){
            $('#bkg img').fadeIn();
                // your code after load
        } else {
            // your code onloading time
        }
    });
    

    【讨论】:

      【解决方案3】:

      我认为这并不像看起来那么容易,here 应该是一个解决方案..

      【讨论】:

      • 这很好,但我很难理解它。我想问 $("#bkg img") 是否存在于 window.localStorage.cachedElements 中,对吗?让我试一试...
      • 好吧,我真的不明白。有没有人有进一步的想法?
      • Nope..你应该首先检查 window.localStorage 是否有你的源字符串(根据链接的解决方案),然后如果它没有存储在那里,你应该绑定加载事件处理程序fadeIn 代码,否则什么都不做,让它正常显示。实际上并没有存储图像本身,只有持久性信息,图像是否已经加载过(我们假设如果是,它应该在缓存中..)
      猜你喜欢
      • 2014-06-18
      • 2011-09-26
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多