Struppi: JavaScript für Gallery - bitte kommentieren

Beitrag lesen

Kann sich das jemand anschaun und Verbesserungsvorschläge machen? Eventuell sind da noch Denkfehler oder tote Leichen drinnen. Vielleicht mag das der eine oder andere Browser sogar aus irgendeinem Grund überhaupt nicht. Wer weiß...

Einmal halte ich das für nicht sinnvoll eigene Arraygrenzen zu definieren, ist auch überflüssig.

so bekommst du ein sauberes Array mit deinen Bildern:

do  
{  
    imgArray[imgArray.length] = prefix + count + suffix;  
}while(imgLast > count++ )  

Dann musst du den onbload bzw. onerror Handler benutzen um das Bild anzuzeigen. Auch wenn der nicht dokumentiert ist funktioniert der (bis ein kleines Problem im IE, der den Event nicht feuert, wenn das Bild im Cache ist.

function changeImage(dir)  
{  
    var count = getCounter( dir, count);  
  
    var newImg = new Image();  
    newImg.onload = function()  
    {  
        document.getElementById(imgdesc).firstChild.nodeValue = imgPrefix + count + imgSuffix;  
        document.getElementById(imgname).style.display =  "";  
        document.getElementById(imghold).style.height = this.height + 2 + 18 + "px";  
        document.getElementById(imghold).style.width = this.width + 2 + "px";  
    };  
    newImg.onerror = function()  
    {  
        document.getElementById(imgdesc).firstChild.nodeValue = imgError;  
        document.getElementById(imgname).style.display =  "none";  
        document.getElementById(imghold).style.height = "18px";  
    };  
    newImg.src = imgArray[count];  
    if(document.all && newImg.complete) newImg.onload();  
  
    preImg = new Image();  
    count = getCounter( dir, count);  
    preImg.src = imgArray[count];  
}  

Der Counter kann dann so weiter gezählt werden:

function getCounter(dir, count)  
{  
    count += dir ? 1 : -1;  
    if(count < 0 ) count = imgArray.length - 1;  
    else if( count >= imgArray.length) count = 0;  
    return count;  
}  

(ungetestet, da ich die Bilder nicht hab)

Struppi.

--
Javascript ist toll (Perl auch!)