Büyük resmi, kullanıcının tarayıcı penceresine sığacak şekilde yeniden boyutlandırmak için bazı Javascript yazıyorum. (Maalesef kaynak görüntülerin boyutunu kontrol etmiyorum.)
Yani HTML'de böyle bir şey olacaktır:
<img id="photo"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
src
Bir img
etiketteki görselin indirilip indirilmediğini belirlememin bir yolu var mı ?
Buna ihtiyacım var çünkü $(document).ready()
tarayıcı resmi yüklemeden önce çalıştırılırsa bir sorunla karşılaşıyorum . $("#photo").width()
ve $("#photo").height()
yer tutucunun boyutunu (alternatif metin) döndürür. Benim durumumda bu 134 x 20 gibi bir şey.
Şu anda sadece fotoğrafın yüksekliğinin 150'den az olup olmadığını kontrol ediyorum ve eğer öyleyse sadece alternatif metin olduğunu varsayıyorum. Ancak bu oldukça zor ve bir fotoğraf 150 pikselden daha azsa (benim özel durumumda büyük olasılıkla değil) veya alternatif metin 150 pikselden daha yüksekse (muhtemelen küçük bir tarayıcı penceresinde olabilir) .
Düzenle: Kodu görmek isteyen herkes için:
$(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));
}
});
Güncelleme : Öneriler için teşekkürler. Etkinlik için bir geri arama ayarlarsam etkinliğin tetiklenmemesi riski vardır $("#photo").load
, bu nedenle doğrudan resim etiketi üzerinde bir onLoad etkinliği tanımladım. Kayıt için, işte son bulduğum kod:
<img id="photo"
onload="photoLoaded();"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
Sonra Javascript'te:
//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
vemax-height
Javascript ile resim stilinde sorun nedir? Ardından, maksimum genişlik / yüksekliği görüntü alanı genişliğinin / yüksekliğinin boyutuna ayarlayarak yazmanız gereken TÜM koddan kaçınırsınız.