Ich schreibe etwas Javascript, um die Größe des großen Bildes so zu ändern, dass es in das Browserfenster des Benutzers passt. (Ich kontrolliere leider nicht die Größe der Quellbilder.)
So etwas wäre also im HTML:
<img id="photo"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
Kann ich feststellen, ob das src
Bild in einem img
Tag heruntergeladen wurde?
Ich brauche das, weil ich auf ein Problem stoße, wenn $(document).ready()
es ausgeführt wird, bevor der Browser das Bild geladen hat. $("#photo").width()
und $("#photo").height()
gibt die Größe des Platzhalters (den Alternativtext) zurück. In meinem Fall ist das ungefähr 134 x 20.
Im Moment überprüfe ich nur, ob die Höhe des Fotos weniger als 150 beträgt, und gehe davon aus, dass es sich in diesem Fall nur um Alternativtext handelt. Dies ist jedoch ein ziemlicher Hack, und es würde brechen, wenn ein Foto weniger als 150 Pixel hoch ist (in meinem speziellen Fall nicht wahrscheinlich) oder wenn der Alternativtext mehr als 150 Pixel hoch ist (möglicherweise in einem kleinen Browserfenster). .
Bearbeiten: Für alle, die den Code sehen möchten:
$(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));
}
});
Update : Danke für die Vorschläge. Es besteht die Gefahr, dass das Ereignis nicht ausgelöst wird, wenn ich einen Rückruf für das $("#photo").load
Ereignis festlege. Daher habe ich ein onLoad-Ereignis direkt auf dem Image-Tag definiert. Für die Aufzeichnung ist hier der Code, mit dem ich am Ende gegangen bin:
<img id="photo"
onload="photoLoaded();"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
Dann in 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
undmax-height
am Bildstil mit Javascript? Sie vermeiden dann den gesamten Code, den Sie schreiben müssen, indem Sie die maximale Breite / Höhe auf die Größe der Breite / Höhe des Ansichtsfensters einstellen.