Estou escrevendo algum Javascript para redimensionar a imagem grande para caber na janela do navegador do usuário. (Não controlo o tamanho das imagens de origem, infelizmente.)
Portanto, algo assim estaria no HTML:
<img id="photo"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
Existe uma maneira de determinar se a src
imagem em uma img
tag foi baixada?
Eu preciso disso porque estou tendo um problema se $(document).ready()
for executado antes que o navegador carregue a imagem. $("#photo").width()
e $("#photo").height()
retornará o tamanho do espaço reservado (o texto alternativo). No meu caso, é algo como 134 x 20.
No momento, estou apenas verificando se a altura da foto é inferior a 150 e presumindo que, se for, é apenas texto alternativo. Mas isso é um grande hack, e seria quebrado se uma foto tivesse menos de 150 pixels de altura (provavelmente não no meu caso em particular) ou se o texto alternativo tivesse mais de 150 pixels de altura (possivelmente poderia acontecer em uma pequena janela do navegador) .
Edit: Para quem deseja ver o código:
$(function()
{
var REAL_WIDTH = $("#photo").width();
var REAL_HEIGHT = $("#photo").height();
$(window).resize(adjust_photo_size);
adjust_photo_size();
function adjust_photo_size()
{
if(REAL_HEIGHT < 150)
{
REAL_WIDTH = $("#photo").width();
REAL_HEIGHT = $("#photo").height();
if(REAL_HEIGHT < 150)
{
//image not loaded.. try again in a quarter-second
setTimeout(adjust_photo_size, 250);
return;
}
}
var new_width = . . . ;
var new_height = . . . ;
$("#photo").width(Math.round(new_width));
$("#photo").height(Math.round(new_height));
}
});
Atualização : Obrigado pelas sugestões. Há o risco de o evento não ser disparado se eu definir um retorno de chamada para o $("#photo").load
evento, portanto, defini um evento onLoad diretamente na tag da imagem. Para registro, aqui está o código que acabei usando:
<img id="photo"
onload="photoLoaded();"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
Depois, em Javascript:
//This must be outside $() because it may get called first
var isPhotoLoaded = false;
function photoLoaded()
{
isPhotoLoaded = true;
}
$(function()
{
//Hides scrollbars, so we can resize properly. Set with JS instead of
// CSS so that page doesn't break with JS disabled.
$("body").css("overflow", "hidden");
var REAL_WIDTH = -1;
var REAL_HEIGHT = -1;
$(window).resize(adjust_photo_size);
adjust_photo_size();
function adjust_photo_size()
{
if(!isPhotoLoaded)
{
//image not loaded.. try again in a quarter-second
setTimeout(adjust_photo_size, 250);
return;
}
else if(REAL_WIDTH < 0)
{
//first time in this function since photo loaded
REAL_WIDTH = $("#photo").width();
REAL_HEIGHT = $("#photo").height();
}
var new_width = . . . ;
var new_height = . . . ;
$("#photo").width(Math.round(new_width));
$("#photo").height(Math.round(new_height));
}
});
max-width
emax-height
estilizar as imagens com Javascript? Em seguida, você evita TODO o código que precisa escrever, definindo a largura / altura máxima para o tamanho da largura / altura da janela de visualização.