Mipe: Fenster mit variabler Größe

Hallo,

ich habe eine Funktion geschrieben, die ein beliebiges Bild in einem neuen Fenster anzeigt, und dieses Fenster exakt auf die Größe des Bildes (+ eines "Schließen"-Buttons) zurechtstutzt:

----
function ShowPicture (File)
{
 var NewPic = new Image(File);

var height = NewPic.height + 50;
 var width  = NewPic.width;

var Fenster = window.open("","Detail","width="+width+", height="+height);
 Fenster.document.write("<body bgcolor='#FFFFFF' leftmargin='0' topmargin='0'");
 Fenster.document.write(" marginwidth='0' marginheight='0'><p align='center'><img src='"+File+"'><br><br><input type='button'");
 Fenster.document.write(" value='Fenster schliessen' onclick='window.close()'></p></body>");
}
----

Die Funktion wird z. B. mit "img/bild.gif" als Parameter aufgerufen. Jetzt hab ich nur ein Problem. Anscheinend wird die Größe des Fensters schon dem Bild angepaßt, obwohl dieses noch nicht geladen ist. Deshalb hat das Fenster immer eine Höhe von 50 und eine Breite von xxx Pixel.

Gibt es hier eine Möglichkeit dem zu entgehen oder ist die einfachste Möglichkeit, die Größe des Fensters im Nachhinein zu verändern (und die Frage ist, macht er das dann auch)?

Für eine kleine Hilfestellung wäre ich sehr dankbar,

Mipe

  1. function ShowPicture (File)
    {
     var NewPic = new Image(File);

    var height = NewPic.height + 50;
     var width  = NewPic.width;

    Ich bin mir nicht sicher, ob nach dem Laden die Dimensionen zur Verfügung stehen. Denkbar ist es aber.

    var Fenster = window.open("","Detail","width="+width+", height="+height);

    Ich bin mir sehr sicher, daß Dein Computer nicht langsam genug ist :) Du müßtest den complete des Bilds abwarten, bevor Du weitermachst.

  2. ich habe eine Funktion geschrieben, die ein beliebiges Bild in einem neuen Fenster anzeigt, und dieses Fenster exakt auf die Größe des Bildes (+ eines "Schließen"-Buttons) zurechtstutzt:

    Die Funktion funktioniert so nicht, da du anscheinend deine Dokumentationen nicht richtig gelesen hast


    function ShowPicture (File)
    {
    var NewPic = new Image(File);

    Wo steht das File in den Konstruktor kommt?

    var height = NewPic.height + 50;
    var width  = NewPic.width;

    Hier ist die Höhe des Bildes unbekannt, das Bild muss erst geladen werden.
    Der event dazu heißt onload.

    var Fenster = window.open("","Detail","width="+width+", height="+height);

    Folglich öffnet sich das Fenster in der mindest größe.

    Die Funktion wird z. B. mit "img/bild.gif" als Parameter aufgerufen. Jetzt hab ich nur ein Problem. Anscheinend wird die Größe des Fensters schon dem Bild angepaßt, obwohl dieses noch nicht geladen ist. Deshalb hat das Fenster immer eine Höhe von 50 und eine Breite von xxx Pixel.

    xx dürfte ca. 100 sein.

    Gibt es hier eine Möglichkeit dem zu entgehen oder ist die einfachste Möglichkeit, die Größe des Fensters im Nachhinein zu verändern (und die Frage ist, macht er das dann auch)?

    ja, ich hab ein Skript geschrieben, das das versucht, da es bei den verschiedenen Browsern zu verschiedenen Schwierigkeiten kommt http://home.arcor.de/struebig/js/popup/index.htm

    Struppi.

    1. var NewPic = new Image(File);

      Wo steht das File in den Konstruktor kommt?

      Das nennt man betriebsblind. Den größten Faux pas hab ich übersehen :)

  3. Hallo,

    Die Funktion wird z. B. mit "img/bild.gif" als Parameter aufgerufen. Jetzt hab ich nur ein Problem. Anscheinend wird die Größe des Fensters schon dem Bild angepaßt, obwohl dieses noch nicht geladen ist. Deshalb hat das Fenster immer eine Höhe von 50 und eine Breite von xxx Pixel.

    Versuch doch mal den Ladezustand des Bildes über http://selfhtml.teamone.de/javascript/objekte/images.htm#complete abzufragen. Du gehst so lange in eine Schleife bis das Bild komplett ist oder ein Timeout eintritt. Wenn du die Daten hast, dann kannst du dein Fenster aufmachen. Bei einem Timeout zeigst du halt ne Fehlermeldung.

    Viele Grüße,

    Stefan

    --
    Lass dir das Tanzen NICHT verbieten
    http://tanzverbot.de
    1. Versuch doch mal den Ladezustand des Bildes über http://selfhtml.teamone.de/javascript/objekte/images.htm#complete abzufragen. Du gehst so lange in eine Schleife bis das Bild komplett ist oder ein Timeout eintritt. Wenn du die Daten hast, dann kannst du dein Fenster aufmachen. Bei einem Timeout zeigst du halt ne Fehlermeldung.

      Das ist Blödsinn und funktioniert auch nicht zuverläßlich.
      Dafür existiert der onload event.

      var img = new Image();

      img.onload = function () { alert(this.src + ' geladen'); } ;
      img.onrror = function () { alert(this.src + ' existiert nicht.'); } ;
      img.src = url;

      Struppi.

  4. Hi,

    ich habe sowas mal gemacht mit resize gemacht.

    http://www.brazil.de/brazil-explorer/fotos/gallery/0_test/index.html

    Das Script findest Du auch auf der Seite. Funktioniert einigermaßen. Allerdings habe ich mich schon lange nicht mehr damit beschäftigt. Also selber schauen ob es für deine Zwecke geeignet ist.

    Gruss
    Frankie

    1. Hi,

      ich habe sowas mal gemacht mit resize gemacht.

      http://www.brazil.de/brazil-explorer/fotos/gallery/0_test/index.html

      Ahhh - sorry, aber das Skript ist Mist. Das ist ja genau so ein Skript, dass versucht mit der Eigenschaft complete zu arbeiten.

      Es gibt die events onload und onerror für Bilder, die die Überprüfung ob Bilder geladen wurden oder nciht selbstständig und sicher durchführen, diese Timeouts sind nicht nötig. Danben funktioniert dein Skript nur mit eingeschalteten JS, meine Variante geht sogar ohne.

      Struppi.

      1. Hi,

        Ahhh - sorry, aber das Skript ist Mist. Das ist ja genau so ein Skript, dass versucht mit der Eigenschaft complete zu arbeiten.

        Habe ich etwa behauptet daß mein Script gut sei?

        ... Danben funktioniert dein Skript nur mit eingeschalteten JS, meine Variante geht sogar ohne.

        Äh, what? Erlär' mir bitte mal wie deine Funktionen showBild(), etc. ohne js ausgeführt werden sollen... irgendwie stehe ich jetzt auf dem Schlauch ;-(

        Frankie.

        1. Hi,

          Ahhh - sorry, aber das Skript ist Mist. Das ist ja genau so ein Skript, dass versucht mit der Eigenschaft complete zu arbeiten.
          Habe ich etwa behauptet daß mein Script gut sei?

          Aber du postest es hier.
          Damit zeigst du, dass du Leuten was beibringen oder helfen willst, das tust du aber schlechten Code?
          Da würde ich mich aber bedanken.

          Guck dir mal folgenden Code ein, das ist die üblich eMethode um ein Bild fertig zu laden und dann seine Größe abzufragen:

          var img = new Image();
          img.onload =
          function () { alert('Das Bild ' + this.src + ' ist fertig geladen.');};
          img.onerror =
          function () { alert('Das Bild ' + this.src + ' existiert nicht.');};

          img.src = src;

          ... Danben funktioniert dein Skript nur mit eingeschalteten JS, meine Variante geht sogar ohne.
          Äh, what? Erlär' mir bitte mal wie deine Funktionen showBild(), etc. ohne js ausgeführt werden sollen... irgendwie stehe ich jetzt auf dem Schlauch ;-(

          Hab ich das behauptet, ich sagte nur es funktionert sogar ohne JS, aber es hat nicht die gleiche Funktionalität.

          <a href="link_zum_grossen_bild.jpg" onclick="return showBild(this);">....</A>

          Funktioniert auch ohne JS.

          Struppi.