Felix Riesterer: Links bei sich wechselnden Bildern

Beitrag lesen

Lieber Roland,

	var myimages=new Array()  
  	myimages[1]="Unbenannt.png"  
  	myimages[2]="Unbenannt2.png"  
  	myimages[3]="Unbenannt3.png"  
  	myimages[4]="Unbenannt4.png"  
  	myimages[5]="Unbenannt6.png"
  
das liest sich besser so:  
  
~~~javascript
var myimages = [  
    "Unbenannt.png",  
    "Unbenannt2.png",  
    "Unbenannt3.png",  
    "Unbenannt4.png",  
    "Unbenannt6.png"  
];

document.write('<img src="'+myimages[ry]+'" border=0>')

Da sollte ein Semikolon am Ende stehen, auch wenn JavaScript hier ohne ein solches keinen Syntax-Fehler bemängelt. Das gilt für jede einzelne Anweisung.

Generell gefällt mir die Verwendung von document.write nicht. Es kommt aus den Urzeiten von JavaScript. Besser gefällt mir das Erstellen von Elementknoten, die dann in den Elementenbaum eingehängt werden - auch wenn das Deinen Code wesentlich verkompliziert. Es ist für Deine Zwecke document.write zwar völlig ausreichend, funktioniert aber nur, wenn die Seite gerade geladen wird. Späteres verändern (z.B. wie eine Dia-Show) leistet Dein Code dann aber nicht! Wenn Du das später einmal haben willst, wirst Du Deine Funktion wesentlich umbauen müssen.

random_imglink()

Es ist gut, dass Du Deinen gesamten Code in eine Funktion verpackst, um diese dann später aufzurufen. Aber in diesem Fall soll ja nur ein einziges Mal der Code ausgeführt werden. Da bräuchte es eigentlich keine eigens definierte Funktion, zumindest keine benannte Funktion. Stattdessen könnte man eine "anonyme" Funktion notieren, die auch sofort ausgeführt wird. Vergleiche einmal diese beiden Schreibweisen:

function random_imglink() { ... }  
random_imglink();  
  
  
(function () {... } ());

Durch die Notation function random_imglink () {...} definierst Du eine Funktion mit einem Namen, die dann als window.random_imglink bekannt ist (man sagt eine Methode des window-Objektes). Du könntest auch gleich window.random_imglink = function () {} notieren, das käme auf dasselbe hinaus. Manchmal will man aber nicht, dass da eine neue Methode beim window-Objekt angelegt wird, um dieses nicht zuzumüllen, insbesondere dann nicht, wenn man mehrere JavaScripte in seine Seite einbinden will, daher mein Vorschlag mit der zweiten Notation.

Die Schreibweise random_imglink() steht ja im Grunde für das Ausführen Deiner Funktion. Stattdessen könntest Du ja auch function () { ... }() notieren. Es ist nur üblicherweise sinnvoller, einen Funktionscode mit einem Namen zu versehen, damit man ihn nicht nur einmal, sondern öfters aufrufen kann, insbesondere auch von anderen Kontexten heraus. Aber für Deinen Zweck ist das nicht notwendig, daher kann man diesen Funktionsaufruf in Klammern setzen, damit sich der Parser nicht daran stört, dass die Funktion keinen Namen trägt. Denn dann ist die Syntax ähnlich der folgenden:

var random_imglink = function () { ... };

Hier wird ein Funktionsobjekt definiert und in einer Variable gespeichert. Wenn man soetwas in einer Funktion notiert, dann ist die Variable eine sogenannte lokale Variable, ansonsten landen wir wieder bei window.random_imglink. Und wenn man ein Funktionsobjekt so notieren kann, dann kann man das auch als "Argument" notieren, wie bei Deinem if-Statement:

if (ry == 0) ry=1;

Dort notierst Du in der runden Klammer ein Argument. Das Sprachkonstrukt "if" (nein, if ist keine Funktion oder ein Funktionsaufruf!) bekommt in der Klammer etwas vor die Füße geworfen, welches es jetzt auswerten muss. Dort könnte auch ein Funktionsaufruf stehen, oder sogar ein Funktionsobjekt, dessen Rückgabewert if auswerten soll:

if (my_func()) {...};  
  
if (function () { var myimages = ... }()) {...}

Deshalb ist es aus meiner Sicht für Deinen Zweck am besten, wenn Du Deinen Code in einer anonymen Funktion notierst, die in runden Klammern steht, um dann auch sofort ausgeführt zu werden:

(function () {  
    var myimages = [  
        "Unbenannt.png",  
        "Unbenannt2.png",  
        "Unbenannt3.png",  
        "Unbenannt4.png",  
        "Unbenannt6.png"  
    ];  
  
    // Zufallszahl zwischen 1 und 4 (0 ausschließen, "Unbenannt.png" nie verwenden):  
    var ry = Math.floor(  
        // random * (Obergrenze - Untergrenze) + Untergrenze  
        Math.random() * (myimages.length -1) +1  
    );  
  
    document.write('<img src="'+myimages[ry]+'" alt="Thmubnail" border=0>');  
}());

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)