ich habe mir eine JavaScript-Funktion geschrieben, die eine JPG-Grafik in einem neuen Fenster öffnen, wenn man raufklickt. Nun möchte ich dieses neue Fenster genau so groß machen wie die Grafik, d.h. ich muß irgendwie die Höhe und die Breite dieser Grafik ermitteln. Kann mir jemand sagen, wie das geht?
also wenn Du Deine Grafik in ein Image-Objekt vorlädst:
var imgObj = new Image(20,20);
imgObj.src = „./MyPathName/MyImageName.jpg“;
wobei 20,20 schon fuer die vorbelegte Breite und Hoehe in Pixels angibt, was aber nicht sein muss…, so kannst Du die Breite und Hoehe abfragen im JavaScript:
var myHeight = imgObj.height;
var myWidth = imgObj.width;
also bei mir funktioniert es. Habe es eben selbst getestet mit dem IE5.5 und NS4.76. Dein Code ist korrekt und width und height werden korrekt zurueckgeliefert. Allerdings muss ich sagen gibt es da einen kleinen SideEffekt. Wenn Du width und height abfragst, bevor die Grafik vollstaendig vom Browser geladen werden konnte, dann kann er natuerlich width und height nicht abfragen und 0 wird zurueckgeliefert. Ist also ein Laufzeitproblem, gerade bei groesseren Grafiken.
Entweder setzt Du ein Timeout bevor Du die Werte abfragst oder Du uebergibst an Deine Funktion zwei weitere Parameter, wenn Dir die Groesse Deiner Grafik schon aperiori bekannt ist:
function showImage(imgURL,pxHeight,pxWidth)
{
…
var img = new Image(pxHeight,pxWidth);
…
}
Entweder setzt Du ein Timeout bevor Du die Werte abfragst
Danke, das hat wunderbar funktioniert. Allerdings tritt schon wieder ein unerwünschter Nebeneffekt auf. Hintergrund ist folgender: auf einer Seite stelle ich Thumbnails dar und wenn man raufklickt, so soll das volle Bild in ein größenangepaßtes neues Browserfenster geladen werden. Das klappt jetzt auch alles, nur man muß zweimal auf das Thumbnail klicken, bevor das neue Fenster erscheint. Habe ich da noch einen „konzeptionellen“ Fehler drin?
<!–
var imgWidth;
var imgHeight;
var imgWindow;
var buildString = „dependent=no,height=“;
var img = new Image();
function loadImage(imgURL)
{
img.src = imgURL;
if (img.complete == true) setSize();
}
Leider habe ich heute keine Zeit mehr um das ausfuehrlicher zu erklaeren, aber der Fall ist klar:
img.src = imgURL;
if (img.complete == true) setSize();
Beide Codezeilen werden hintereinander abgearbeit und zwar schneller als das Bild geladen werden kann. Die Script-abarbeitung stoppt nicht bei der ersten Zeile wo das Image geladen wird, sondern die if-Klausel kommt gleich danach, waehrend im Hintergrund sozusagen noch das Bild geladen wird. Du musst mit window.setTimeout() oder window.setInterval() arbeiten.