Nico: Doppelanzeige bei Zufallsauswahl vermeiden ?

Beitrag lesen

Hi Thomas,

Du hast verstanden. Danke fuer Deine Leosung.

Eine Frage bleibt:

Speicher ich alle Bildverweise in ein Array (bei mir sind es ca 50 Bilder), werden dann die Bilder nicht alle geladen, bevor einige Davon ausgewaehlt und dargestellt werden?
Das wuerde ja enorme Ladezeiten verursachen ....

Gruesse
Nico

Ich hab' jetzt Deine Frage möglicherweise nicht 100% verstanden.
Ich gehe einfach mal davon aus, dass Du einen Pool von vielen Bildern hast, und auf der Seite einige davon zufällig darstellen möchtest, sich dabei aber keines wiederholen soll.

Dafür würden mir jetzt adhoc mehrere Möglichkeiten einfallen, und ich bin mir sicher, dass die eleganteste Lösung noch nicht dabei ist.

Ich verwende jedenfalls ein Array, in dem alle BildVerweise gespeichert werden. Sobald ein Bild "aufgebraucht" ist, wird der String auf den Leerstring gesetzt. In einer Schleife wiederhole ich den Zugriff solange, bis ich einen gültigen String erwische. Außerdem habe ich versucht, den HTML-Code möglichst übersichtlich zu halten und die JavaScripts möglichst auszulagern.
ACHTUNG: Code nicht getestet!!
GEFAHR: Sind in dem Pool (=Array) weniger Bilder als auf der Seite letzlich verwendet werden, hängen wir in einer Endlosschleife!!

<script>
var pics = new Array("herz.gif", "karro.gif", "kreuz.gif", "pik.gif", "sonstwas.jpg");

function GetPic() {
    var idx;
    var picName="";
    while(picName=="") {
        idx=Math.floor(rnd()*pics.length);
        picName=pics[idx];
    }
    pics[idx]="";
    return picName;
}

function WritePic() {
    document.writeln("<img src='" + GetPic() + "'");
}

</script>

<!-- irgendwo im HTML-Code, gerne auch in jeder Tabellenzelle -->
<!-- in diesem Fall ein 2x2 Tabelle -->
<table>
<tr>
<td>
<script>WritePic();</script>
</td>
<td>
<script>WritePic();</script>
</td>
</tr>
<tr>
<td>
<script>WritePic();</script>
</td>
<td>
<script>WritePic();</script>
</td>
</tr>
</table>

Aber wie gesagt: dass ist nur ein Ansatz von vielen...

Hope that helps!

Thomas