Piszę trochę JavaScript, aby zmienić rozmiar dużego obrazu, aby zmieścił się w oknie przeglądarki użytkownika. (Niestety nie kontroluję rozmiaru obrazów źródłowych).
Więc coś takiego byłoby w HTML:
<img id="photo"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
Czy istnieje sposób, aby sprawdzić, czy src
obraz w img
tagu został pobrany?
Potrzebuję tego, ponieważ mam problem, jeśli $(document).ready()
jest wykonywany przed załadowaniem obrazu przez przeglądarkę. $("#photo").width()
i $("#photo").height()
zwróci rozmiar symbolu zastępczego (tekst alternatywny). W moim przypadku jest to około 134 x 20.
W tej chwili sprawdzam tylko, czy wysokość zdjęcia jest mniejsza niż 150 i zakładam, że jeśli tak, to tylko tekst alternatywny. Ale to niezły hack i zepsuje się, jeśli zdjęcie ma mniej niż 150 pikseli wysokości (mało prawdopodobne w moim przypadku) lub jeśli tekst alternatywny ma więcej niż 150 pikseli wysokości (może się to zdarzyć w małym oknie przeglądarki) .
Edycja: dla każdego, kto chce zobaczyć kod:
$(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));
}
});
Aktualizacja : Dzięki za sugestie. Istnieje ryzyko, że zdarzenie nie zostanie uruchomione, jeśli ustawię wywołanie zwrotne dla $("#photo").load
zdarzenia, więc zdefiniowałem zdarzenie onLoad bezpośrednio w tagu obrazu. Dla przypomnienia, oto kod, z którym skończyłem:
<img id="photo"
onload="photoLoaded();"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
Następnie w 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
imax-height
stylizowaniu obrazu za pomocą JavaScript? W ten sposób unikniesz CAŁEGO kodu, który musiałeś napisać, ustawiając maksymalną szerokość / wysokość na rozmiar szerokości / wysokości widoku.