thrillseeker: existenz von grafikdatei(en) prüfen / Dateianzahl feststellen

Hallo!

Ich möchte meine bildergalerien dynamisch darstellen. von einer hauptseite aus (picstart.htm) rufe ich den galerieHandler auf (gal.htm) und übergebe die galerienummer in der URL (z.B. gal.htm?001)

die bilder sind katalogähnlich sortiert in einem unterordner mit fortlaufenden nummern (/bilder/001/ ...u.s.w.) und die bilder selbst haben auch je ordner fortlaufende nummer ab 001 (001.jpg) dadurch hab ich mir die steuerung für den anfang erleichtert. (glaube ich ;oD)

die gal.htm soll nun im hauptframe zunächst die galerie betiteln, dann eine zeile mit den link für jedes bild ausgeben. die links ändern das anzuzeigende bild über ein script:

var GaleryNumber=location.search.substring(1,location.search.length);
function changepic(nr)
{
document.images[0].src = "./" + GaleryNumber + "/" + nr + ".jpg"
}

die galerienummer und somit die ordnernummer isoliere ich aus der URL, jetzt brauche ich nur noch ein script das mit document.write oder ähnlich die link erstellt. da aber nicht in jedem ordner die gleiche anzahl bilder vorhanden ist muss ich irgendwie die anzahl feststellen.

kann man evtl. mit einer for-schleife prüfen wie viele bilder vorhanden sind?

möglicherweise ist es einfacher eine txt-datei in jedem bild-ordner anzulegen die den Wert für die bilderanzahl enthält.

kann mir jmd eine lösung schreiben?

gruß thrillseeker

PS: die seite unter meiner URL enthält noch die "alte" version der galerie.

  1. kann man evtl. mit einer for-schleife prüfen wie viele bilder vorhanden sind?

    nein, sondern mit dem onload bzw onerror Handler.

    var img = new Image();

    img.onload = function() {
    alert(this.src + ' ist fertig');
    }

    img.onerror = function() {
    alert(this.src + ' gibt's nicht');
    }

    img.src = url;

    Struppi.

    1. nein, sondern mit dem onload bzw onerror Handler.

      [...]

      Hmm, dadurch würden dann ja zunächst alle existenten bilder geladen werden, was mir nicht so gut gefällt, da ich bei meiner site darauf achten will, dass sie möglichst wenig traffic erzeugt und schnell lädt. wenn nun aber alle grafiken im vorraus geladen werden würde schon das die ladezeit gewaltig erhöhen und der besucher hat die bilder im cache ganz gleich ob er sie jemals angesehen hat oder ansehen wollte.

      gibt es nicht eine möglichkeit, dass ich eine txt-datei anlege in der ich die dateianzahl speichere, die dann ausgelesen wird um somit das erzeugen der links zu den bildern zu steuern ? in der datei würde dann z.B. wie im fall der ersten bildergalerie "20" eingetragen sein.

      Danke schon mal an Struppi!
      MfG Thrillseeker

      1. Hmm, dadurch würden dann ja zunächst alle existenten bilder geladen werden, was mir nicht so gut gefällt, da ich bei meiner site darauf achten will, dass sie möglichst wenig traffic erzeugt und schnell lädt. wenn nun aber alle grafiken im vorraus geladen werden würde schon das die ladezeit gewaltig erhöhen und der besucher hat die bilder im cache ganz gleich ob er sie jemals angesehen hat oder ansehen wollte.

        Dannn nutze halt nur onerror und gehe einfach davon aus, das wenn das Bild keinen Fehler wirft vorhanden ist.

        Also in etwa so:

        var stop = false;
        var anzahl = 0
        var img = new Image();
        img.onerror = function() { stop = true; };

        nextImg();

        function nextImg()
        {
        img.src = 'bilder' + anzahl + '.jpg';
        if(!stop) setTimeOut( 'nextImg()', 500);
        }

        oder du machst es umgekehrt und zählst von einer hohen Zahl runter, bist kein error mehr geworfen wird, dann kannst du dir evtl. den Timeout sparen. Da der nicht ganz zuverlässig ist, wenn der Server nicht schnell genug antwortet (500ms in dem Fall) wird die Schleife fälschlicherweise abgebrochen.

        Struppi.