Desejo criar uma caixa de alerta depois que uma imagem for carregada, mas se a imagem for salva no cache do navegador, o .onload
evento não será disparado.
Como faço para disparar um alerta quando uma imagem é carregada, independentemente de a imagem ter sido armazenada em cache ou não?
var img = new Image();
img.src = "img.jpg";
img.onload = function () {
alert("image is loaded");
}
javascript
image-loading
Oto Shavadze
fonte
fonte
Respostas:
Conforme você está gerando a imagem dinamicamente, defina a
onload
propriedade antes desrc
.Fiddle - testado nas últimas versões do Firefox e Chrome.
Você também pode usar a resposta desta postagem , que adaptei para uma única imagem gerada dinamicamente:
Violino
fonte
.src
antes de definir .onload? Você acertou no primeiro exemplo de código, mas bagunçou o segundo. O segundo não funcionará corretamente em algumas versões do IE.=]
Ele utiliza uma.complete
verificação caso a imagem já tenha sido armazenada em cache, portanto o código estava demonstrando isso. Obviamente, como prática recomendada, você sempre pode definir asrc
ligação after all handlers..complete
neste caso. Apenas configure seu gerenciador de carga antes de configurar.src
e NUNCA é necessário. Eu escrevi uma apresentação de slides que é usada por milhares de sites em todos os navegadores imagináveis e a primeira técnica funciona sempre. Não há necessidade de verificar.complete
quando criar uma nova imagem do zero como esta.=]
. Além disso, @ jfriend00 você poderia verificar se a imagem carrega no IE? Me perguntando se é um problema com minha rede ou com o IE e a imagem.img.src = ''
antes de atribuir um novo src se ele foi usado antes.Se o src já estiver definido, o evento será disparado no caso em cache antes mesmo de você vincular o manipulador de eventos. Portanto, você deve acionar o evento com base
.complete
também.amostra de código:
fonte
Existem duas soluções possíveis para esse tipo de situação:
Adicione um sufixo exclusivo à imagem
src
para forçar o download do navegador novamente, como este:Neste código, toda vez que adicionar o carimbo de data / hora atual ao final do URL da imagem, você o torna único e o navegador irá baixar a imagem novamente
fonte
.onload
manipulador antes de definir o.src
valor e você não perderá o evento onload em algumas versões do IE.Eu encontrei o mesmo problema hoje. Depois de tentar vários métodos, percebi que apenas colocar o código de dimensionamento dentro em
$(window).load(function() {})
vez dedocument.ready
resolveria parte do problema (se você não estiver fazendo o ajax da página).fonte
$(document).ready
para$(window).load
resolveu meu problema.Descobri que você pode simplesmente fazer isso no Chrome:
Definir o .src como ele mesmo acionará o evento onload.
fonte