Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
已加载图像的jQuery事件_Jquery_Dom - Fatal编程技术网

已加载图像的jQuery事件

已加载图像的jQuery事件,jquery,dom,Jquery,Dom,是否可以通过jQuery事件检测何时加载所有图像 理想情况下,应该有一个 $(document).idle(function() { } 或 但我找不到这样的东西 我想附上这样一个活动: $(document).ready(function() { var imageTotal = $('img').length; var imageCount = 0; $('img').load(function(){if(++imageCount == imageT

是否可以通过jQuery事件检测何时加载所有图像

理想情况下,应该有一个

$(document).idle(function()
{
}

但我找不到这样的东西

我想附上这样一个活动:

$(document).ready(function()
{
    var imageTotal = $('img').length;
    var imageCount = 0;        
    $('img').load(function(){if(++imageCount == imageTotal) doStuff();});
}

但是如果一个图像无法加载,这会中断吗?在正确的时间调用方法至关重要。

如果您不想检查所有图像,而是要检查特定的图像(例如,在DOM完成后动态替换的图像),可以使用以下方法:

$('#myImage').attr('src', 'image.jpg').on("load", function() {  
  alert('Image Loaded');  
});  
不能保证将jQuery$().load()用作IMG事件处理程序。如果图像从缓存加载,某些浏览器可能不会触发事件。对于Safari的(较旧?)版本,如果将IMG元素的SRC属性更改为相同的值,则不会触发onload事件

这似乎在最新的jQuery(1.4.x)中得到了认可

如果从浏览器缓存加载图像,则可能不会触发加载事件。为了考虑这种可能性,我们可以使用一个特殊的加载事件,该事件在映像准备就绪时立即触发。event.special.load当前作为插件提供

现在有一个插件可以识别这种情况以及IE对IMG元件负载状态的“完整”属性:

目前,ahpi.imgload.js插件上有一条注释说它目前已损坏,请尝试以下要点:

也许这个插件很有用:

你可以用我的插件来处理这个问题

$(document).waitForImages(function() {
   // Loaded.
});
这样做的好处是您可以将其定位到一个祖先元素,并且可以检测CSS中引用的图像

不过,这只是冰山一角,请查看以了解更多功能。

根据jQuery,在图像中使用load事件有许多注意事项。正如在另一个答案中所指出的,ahpi.imgload.js插件已损坏,但链接的Paul Irish gist不再维护

根据Paul Irish的说法,用于检测图像加载完成事件的规范插件现在位于:

若你们需要一个交叉浏览器解决方案,插件是一个不错的选择

 $("<img>", {src: 'image.jpg'}).imagesLoaded( function( $images, $proper, $broken ){
 if($broken.length > 0){
 //Error CallBack
 console.log('Error');
 }
 else{
 // Load CallBack
 console.log('Load');
 }
 });
$(“0){
//错误回调
console.log('Error');
}
否则{
//加载回调
console.log('Load');
}
});
如果你只是需要一个IE解决方案,这个就可以了

 var img = $("<img>", {
    error: function() {console.log('error'); },
    load: function() {console.log('load');}
    });
  img.attr('src','image.jpg');
var img=$(“根据,您可以使用
窗口
对象上的,而不是
文档

jQuery(window).load(function() {
    console.log("page finished loading now.");
});
这将在加载页面上的所有内容后触发。这不同于加载(…)后触发的jQuery(document)。加载(…)
。对于同源图像,可以使用:
  function CheckImageLoadingState()
  {
     var counter = 0;
     var length = 0;

     jQuery('#siteContent img').each(function() 
     {
        if(jQuery(this).attr('src').match(/(gif|png|jpg|jpeg)$/))
          length++;
     });

     jQuery('#siteContent img').each(function() 
     {  
        if(jQuery(this).attr('src').match(/(gif|png|jpg|jpeg)$/))
        {
           jQuery(this).load(function() 
           {
           }).each(function() {
              if(this.complete) jQuery(this).load();
            });
        }
        jQuery(this).load(function()
        {
           counter++;
           if(counter === length) 
           {  
              //function to call when all the images have been loaded
              DisplaySiteContent();
           }
        });
     });
  }

我创建了自己的脚本,因为我发现很多插件都非常臃肿,我只是想让它按我想要的方式工作。我的脚本检查每个图像是否有一个高度(本机图像高度)。我将其与$(window).load()函数结合起来,以解决缓存问题

我的代码对它进行了大量的注释,所以即使您不使用它,它也应该很有趣。它对我来说非常适合

不用多说,这里是:


等待加载所有图像…
我在这里找到了解决jfriend00问题的答案..和“if(this.complete)”
正在等待加载所有内容,可能还有一些在缓存中!。我已经添加了“错误”事件。。。 它在所有浏览器中都很强大


演示:

window.load=function(){}

所有浏览器都完全支持它,当所有图像都被完全加载时,它将触发一个事件


为什么不使用onload事件:$(window).load(doStuff)?然而,onload也将等待其他资源(例如脚本、样式表和flash),而不仅仅是图像,这对您来说可能是好的,也可能是不好的。将load事件附加到所有img标记上,就像您在代码示例中所做的那样,应该是有效的。如果图像无法加载doStuff()不会被调用,但考虑到必须加载所有图像的要求,这似乎是合理的。自jQuery 1.8以来,.load()方法已被弃用。请检查:小心,因为
load()当图像已加载时,
不会触发。当图像位于用户浏览器缓存中时,这种情况很容易发生。您可以使用
$(“#myImage”).prop('complete')检查图像是否已加载。当图像加载时,该属性将返回true。为什么在加载图像时会有这么多投票没有回答他的问题,并且b)给出了一个糟糕的解决方案?(意思是说,正确答案是@johnplacek's,并有1票)警告!!!!!!!!!!!!!!!这不是正确的答案。约翰波莱克有正确的答案。请投票支持他的答案。这些反对意见似乎不再相关,除非是在一个非常特殊的情况下:当你将图像的src更改为与以前完全相同的src时,Webkit。对于刚刚添加到DOM中的图像,$(…).load()应该足够了。在当前FF和Chrome中测试,IE6-9:+1在(您知道)图像不在浏览器缓存中时工作正常。这就是答案-处理多个图像、缓存图像、浏览器怪癖、损坏图像,并且是当前图像。很漂亮,今天测试过了。在2分钟内启动并运行。同意@Yarin,良好的文档,易于使用,多个,缓存,损坏,当前。喜欢它。不过,如果这对你很重要的话,它也有缺点。一个快速简单的双线修复。这正是我想要的!嗨,亚历克斯,看起来很有前途。但是就像Johnplacek和hirisov在回答和评论中提到的那样,它是否涵盖了图像已经在浏览器缓存中的情况?我有一个过程,在页面已经加载后创建图像并动态加载,并且我需要在用户等待时显示ajax加载程序。这个插件非常适合这个用例。但是,您必须在设置img src属性后调用该函数!window.onload=function(){}
  function CheckImageLoadingState()
  {
     var counter = 0;
     var length = 0;

     jQuery('#siteContent img').each(function() 
     {
        if(jQuery(this).attr('src').match(/(gif|png|jpg|jpeg)$/))
          length++;
     });

     jQuery('#siteContent img').each(function() 
     {  
        if(jQuery(this).attr('src').match(/(gif|png|jpg|jpeg)$/))
        {
           jQuery(this).load(function() 
           {
           }).each(function() {
              if(this.complete) jQuery(this).load();
            });
        }
        jQuery(this).load(function()
        {
           counter++;
           if(counter === length) 
           {  
              //function to call when all the images have been loaded
              DisplaySiteContent();
           }
        });
     });
  }
$.get('http://www.your_domain.com/image.jpg', imgLoaded);

function imgLoaded(){
    console.log(this, 'loaded');
}
$( "img.photo" ).load(function() {

    $(".parrentDiv").css('height',$("img.photo").height());
    // very simple

}); 
$(function() { // Wait dom ready
    var $img = $('img'), // images collection
        totalImg = $img.length,
        waitImgDone = function() {
            totalImg--;
            if (!totalImg) {
                console.log($img.length+" image(s) chargée(s) !");
            }
        };
    $img.each(function() {
        if (this.complete) waitImgDone(); // already here..
        else $(this).load(waitImgDone).error(waitImgDone); // completed...
    });
});