É possível detectar quando todas as imagens são carregadas por meio de um evento jQuery?
Idealmente, deve haver um
$(document).idle(function()
{
}
ou
$(document).contentLoaded(function()
{
}
Mas não consigo encontrar tal coisa.
Pensei em anexar um evento como este:
$(document).ready(function()
{
var imageTotal = $('img').length;
var imageCount = 0;
$('img').load(function(){if(++imageCount == imageTotal) doStuff();});
}
Mas isso vai quebrar se uma imagem não carregar? É extremamente importante que o método seja chamado e no momento certo.
Respostas:
De acordo com a documentação do jQuery , há uma série de ressalvas para o uso do evento load com imagens. Conforme observado em outra resposta, o plug-in ahpi.imgload.js está quebrado, mas a essência Paul Irish vinculada não é mais mantida.
De acordo com Paul Irish, o plug-in canônico para detectar eventos completos de carregamento de imagem agora está em:
https://github.com/desandro/imagesloaded
fonte
Se você deseja verificar não todas as imagens, mas uma específica (por exemplo, uma imagem que você substituiu dinamicamente após o DOM já estar completo), você pode usar isto:
fonte
load()
não disparará quando uma imagem já estiver carregada. Isso pode acontecer facilmente quando uma imagem está no cache do navegador do usuário. Você pode verificar se uma imagem já está carregada usando$('#myImage').prop('complete')
, que retorna verdadeiro quando uma imagem é carregada.Você pode usar meu plugin waitForImages para lidar com isso ...
A vantagem disso é que você pode localizá-lo em um elemento ancestral e, opcionalmente, detectar imagens referenciadas no CSS.
No entanto, esta é apenas a ponta do iceberg, verifique a documentação para obter mais funcionalidades.
fonte
O uso de jQuery $ (). Load () como um manipulador de eventos IMG não é garantido. Se a imagem for carregada do cache, alguns navegadores podem não disparar o evento. No caso de versões (mais antigas?) Do Safari, se você alterou a propriedade SRC de um elemento IMG para o mesmo valor , o evento onload NÃO será disparado.
Parece que isso é reconhecido no jQuery (1.4.x) mais recente - http://api.jquery.com/load-event - para citar:
Agora existe um plug-in para reconhecer este caso e a propriedade "completa" do IE para os estados de carregamento do elemento IMG: http://github.com/peol/jquery.imgloaded/raw/master/ahpi.imgload.js
fonte
De acordo com esta resposta , você pode usar o evento de carregamento jQuery no
window
objeto em vez dedocument
:Isso será acionado depois que todo o conteúdo da página for carregado. Isso difere do
jQuery(document).load(...)
que é acionado após o DOM terminar de carregar.fonte
O plugin imagesLoaded é o caminho a percorrer, se você precisar de uma solução para crossbrowser
Se você só precisa de um IE WorkAround, isso bastará
fonte
No momento, há uma observação sobre o plug-in ahpi.imgload.js dizendo que ele está corrompido no momento e tente esta essência: https://gist.github.com/797120/7176db676f1e0e20d7c23933f9fc655c2f120c58
fonte
Para imagens da mesma origem, você pode usar:
fonte
talvez este plugin possa ser útil: http://www.farinspace.com/jquery-image-preload-plugin/
fonte
fonte
fonte
Eu criei meu próprio script, porque achei muitos plug-ins bastante inchados, e eu só queria que funcionasse da maneira que eu queria. O meu verifica se cada imagem tem uma altura (altura da imagem nativa). Combinei isso com a função $ (window) .load () para contornar os problemas de armazenamento em cache.
O código comentei bastante, então deve ser interessante olhar, mesmo se você não o usar. Funciona perfeitamente para mim.
Sem mais delongas, aqui está:
script imgLoad.js
fonte
Aguardando o carregamento de todas as imagens ...
Encontrei a resposta ao meu problema com o jfriend00 aqui jquery: como ouvir o evento de imagem carregada de um div de contêiner? .. e "if (this.complete)"
Esperando que tudo carregue e possivelmente algum no cache! .. e eu adicionei o evento "error" ... é robusto em todos os navegadores
Demo: http://jsfiddle.net/molokoloco/NWjDb/
fonte
window.load = function(){}
É totalmente compatível com todos os navegadores e disparará um evento quando todas as imagens estiverem totalmente carregadas.
https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload
fonte