Dirk: Shuffle?

Hallo,

vielleicht kann mir Jemand aus der Runde helfen. Ich habe hier eine HTML-Seite mit integriertem Script zu einer Bannerrotation. Meine Frage: Was muss ich ändern, damit nicht immer die gleiche Reihenfolge abläuft, sondern nach einem Zufallsprinzip, die Rotation immer mit einem anderen Banner beginnt! Geht das?

Vielen Dank im voraus!

<html>
<head>
<title>Country Online Magazin [Werbebanner]</title>
<script language="JavaScript">
<!-- Verstecken für ältere Browser

var i = 1;
banner1= new Image();
banner1.src = "http://www.country.de/_Bilder/Logos/Banner_Northeim-Goes-Country-2005.jpg";
banner2 = new Image();
banner2.src = "http://www.country.de/_Bilder/Logos/Anzeige-Banner-Wolfsburg-2005.gif";
banner3 = new Image();
banner3.src = "http://www.country.de/_Bilder/Logos/Banner-Western-Union.jpg";
banner4 = new Image();
banner4.src = "http://www.country.de/_Bilder/Logos/Banner_Northeim-Goes-Country-2005.jpg";
banner5 = new Image();
banner5.src = "http://www.country.de/_Bilder/Logos/werbung-buchen.gif";
//banner3 ... usw.

links = new Array
links[1] = "http://www.northeim-goes-country.de"
links[2] = "http://www.congresspark-wolfsburg.de"
links[3] = "http://www.webhits.de/cgi/webclix?df=78931&link=1"
links[4] = "http://www.northeim-goes-country.de"
links[5] = "http://www.country.de/country_de.htm"
//links[3] usw ...

description = new Array
description[1] = "Das Super-Event auf der Northeimer Waldbühne!"
description[2] = "1. Country Festival in Wolfsburg!"
description[3] = "Larry Schuba & Western Union - Das Original!"
description[4] = "Das Super-Event auf der Northeimer Waldbühne!"
description[5] = "Werben bei Country.de? Hier finden Sie weitere Infos!"
//descrition[3] usw. ...

function startTime(){

var time= new Date();
        hours= time.getHours();
        mins= time.getMinutes();
        secs= time.getSeconds();
        closeTime=hours*3600+mins*60+secs;
        closeTime+=12; // Wieviele Sekunden ein Banner angezeigt wird
        Timer();

}

function Timer(){
        var time= new Date();
        hours= time.getHours();
        mins= time.getMinutes();
        secs= time.getSeconds();
        curTime=hours*3600+mins*60+secs
        if (curTime>=closeTime){
  if (i < 5){ // Wieviele Banner angegeben wurden.
   i++;
   document.banner.src = eval("banner" + i + ".src");
  }
  else{
   i = 1;
   document.banner.src = eval("banner" + i + ".src");
  }
  startTime();
}
        else{
                window.setTimeout("Timer()",1000)}

}

function clickLink(){
window.open (links[i],'_blank') ;
}

function descript(){
window.status = description[i]
}

// -->
</script>
</head>
<body bgcolor="#FFFFFF" background="_themes/expeditn/exptextb.jpg" leftmargin="1" topmargin="2" onLoad="startTime();" text="#000000" link="#000000" vlink="#000000" alink="#000000">
  <table cellpadding="0" cellspacing="0" border="0" align="center">
  <tr>
    <td>&nbsp;</td>
    <td><img src="_Bilder/Logos/Anzeige.gif" width="10" height="68" alt="Anzeigen &amp; Werbebanner bei Country.de" border="0"></td>
    <td><a href="" onClick="clickLink(); return false;" onMouseOver="descript(); return true;" onMouseOut="window.status='_blank'"><img src="http://www.country.de/_Bilder/Logos/Banner_Northeim-Goes-Country-2005.jpg" name="banner" border=0></a></td>
    <td>&nbsp;</td>
  </table>
</body>
</html>

  1. Hallo,

    Hallo,

    var i = 1;

    var i = round(Math.random() * 3) + 1;

    Das liefert Dir eine Start-zahl zwischen 1 und 4.
    Mehr dazu hier:

    http://de.selfhtml.org/javascript/objekte/math.htm#random

    Cu
    Joerg

    1. Nochmal ich,
      Math.round muss das heissen:

      var i = round(Math.random() * 3) + 1;

      var i = Math.round(Math.random() * 3) + 1;

    2. Hallo Jörg Peschke,

      var i = round(Math.random() * 3) + 1;

      damit kommen die Zahlen 1 und 4 aber nur mit halber Wahrscheinlichkeit.

      var i= Math.floor(Math.random() * 3) + 1;

      wäre besser.

      Gruß, Jürgen

      1. Hallo Jörg,

        erstmal vielen Dank. Das klappt schon ganz gut! Nur was muss ich ändern, damit nicht immer das gleiche Banner (Northeim) als erstes steht, sondern irgendeins?

        Dirk

        1. Hallo Jörg,

          erstmal vielen Dank. Das klappt schon ganz gut! Nur was muss ich ändern, damit nicht immer das gleiche Banner (Northeim) als erstes steht, sondern irgendeins?

          Du könntest z.B. dein Bild dynamisch mit JavaScript reinschreiben:
          Statt:
          <img src="http://www.country.de/_Bilder/Logos/Banner_Northeim-Goes-Country-2005.jpg" name="banner" border=0>

          Machst Du:
          <script type="text/javascript">
          <!--
          document.writeln ('<img src="'+eval("banner"+i+".src")+'" name="banner" border=0>');
          //-->
          </script>

          Unf für die nicht JavaScriptler vielleicht noch ein

          <noscript>
          <img src="http://www.country.de/_Bilder/Logos/Banner_Northeim-Goes-Country-2005.jpg" name="banner" border=0>
          </noscript>

          dazu.

      2. Hallo,

        var i= Math.floor(Math.random() * 3) + 1;

        Hmm, etz kommt aber die 4  gar nicht mehr, oder?

        Math.random liefert doch zwischen 0 und 1, Math.floor die nächst-niedrige-Zahl, also sei (1 - Math.random) nahe Null, also z.B.:

        Marth.random() = 0.99857
        Dann ist Math.floor(Math.random)+1 = Math.floor(2.9957)+1 = 2+1 = 3;

        wäre besser.

        Sicher? ;)

        Jörg

        1. Hallo Jörg Peschke,

          var i= Math.floor(Math.random() * 3) + 1;

          mein Fehler, es muss * 4 heißen. Sorry.

          Gruß, Jürgen

          1. Hi nochmal,

            wenn ich 5 Banner habe muss ich dann nicht anstelle der 4 die 5 verwenden?

            Gruß Dirk

            1. Hallo Dirk,

              Math.floor(Math.random()*5); liefert eine Zufallszahl zwischen 0 und 4. Das Ganze +1 ergibt dann eine Zahl zwischen 1 und 5 (einschließlich). Ich habe bei "umfangreichen" Tests in "einigen" Browsern nie beobachtet, dass Math.floor(Math.random()*5) 5 ergibt, aber ich bin nicht sicher, ob Math.random nicht doch die 1.0 liefern kann. Es wäre daher gut, die Zufallszahl zu begrenzen, z.B. mit http://de.selfhtml.org/javascript/objekte/math.htm#min.

              Gruß, Jürgen