No jQuery, quando você faz isso:
$(function() {
alert("DOM is loaded, but images not necessarily all loaded");
});
Ele aguarda o DOM carregar e executa seu código. Se todas as imagens não forem carregadas, ele ainda executará o código. Obviamente, é isso que queremos se estiver inicializando qualquer coisa do DOM, como mostrar ou ocultar elementos ou anexar eventos.
Digamos que eu queira alguma animação e não a execute até que todas as imagens sejam carregadas. Existe uma maneira oficial no jQuery de fazer isso?
A melhor maneira que tenho é usar <body onload="finished()">
, mas realmente não quero fazer isso, a menos que seja necessário.
Nota: Há um bug no jQuery 1.3.1 no Internet Explorer que realmente espera que todas as imagens sejam carregadas antes de executar o código dentro $function() { }
. Portanto, se você estiver usando essa plataforma, obterá o comportamento que estou procurando, em vez do comportamento correto descrito acima.
$("img").load()
funciona?Respostas:
Com o jQuery, você costuma
$(document).ready()
executar algo quando o DOM é carregado e$(window).on("load", handler)
executar algo quando todas as outras coisas também são carregadas, como as imagens.A diferença pode ser vista no seguinte arquivo HTML completo, desde que você tenha
jollyroger
arquivos JPEG (ou outros adequados):Com isso, a caixa de alerta aparece antes do carregamento das imagens, porque o DOM está pronto nesse momento. Se você mudar:
para dentro:
a caixa de alerta não aparecerá até depois que as imagens forem carregadas.
Portanto, para esperar até que a página inteira esteja pronta, você pode usar algo como:
fonte
Eu escrevi um plugin que pode acionar retornos de chamada quando as imagens são carregadas em elementos ou acionar uma vez por imagem carregada.
É semelhante a
$(window).load(function() { .. })
, exceto que permite definir qualquer seletor para verificar. Se você deseja apenas saber quando todas as imagens#content
(por exemplo) foram carregadas, este é o plugin para você.Ele também suporta o carregamento de imagens referenciadas na CSS, tais como
background-image
,list-style-image
, etc.plugin jQuery waitForImages
Exemplo de uso
Exemplo em jsFiddle .
Mais documentação está disponível na página do GitHub.
fonte
('img selector').each(function(index) { var offset = $(this).offset(); ...});
no entanto, offset.top ainda é zero. Por quê?$(window).load()
funcionará apenas na primeira vez que a página for carregada. Se você estiver fazendo coisas dinâmicas (exemplo: clique no botão, aguarde o carregamento de novas imagens), isso não funcionará. Para conseguir isso, você pode usar meu plugin:Demo
Baixar
fonte
Yevgeniy Afanasyev
resposta , o imagesLoaded faz um trabalho muito melhor nisso e cobre o caso de uso que você mencionou junto com muitos outros casos de canto (consulte os problemas resolvidos do github) .Para aqueles que desejam ser notificados da conclusão do download de uma única imagem solicitada após o
$(window).load
disparo, você pode usar oload
evento do elemento de imagem .por exemplo:
fonte
Até agora, nenhuma das respostas deu a que parece ser a solução mais simples.
fonte
Eu recomendaria usar a
imagesLoaded.js
biblioteca javascript.Por que não usar jQuery
$(window).load()
?Conforme solicitado em /programming/26927575/why-use-imagesloaded-javascript-library-versus-jquerys-window-load/26929951
Outras boas razões para usar imagesloaded
Recursos
fonte
Com jQuery eu venho com isso ...
Demonstração: http://jsfiddle.net/molokoloco/NWjDb/
fonte
Use imagesLoaded PACKAGED v3.1.8 (6.8 Kb quando minimizado). É relativamente antigo (desde 2010), mas ainda está ativo.
Você pode encontrá-lo no github: https://github.com/desandro/imagesloaded
Seu site oficial: http://imagesloaded.desandro.com/
Por que é melhor do que usar:
Porque você pode querer carregar imagens dinamicamente, assim: jsfiddle
fonte
Dessa forma, você pode executar uma ação quando todas as imagens dentro do corpo ou qualquer outro contêiner (que depende da sua seleção) são carregadas. Solicitação pura, sem necessidade de pluggins.
fonte
Minha solução é semelhante ao molokoloco . Escrito como função jQuery:
exemplo:
fonte