Der Martin: Bild automatisch täglich wechseln

Beitrag lesen

Hi,

<body onload="setBildViaRex(getPicName());">

okay, damit ist die Aufruflogik schon mal richtig.
Bedenke, dass der onload-Handler erst auslöst, wenn alle Bestandteile des Dokuments geladen sind - also auch Stylesheets, externe Scripts und statisch referenzierte Bilder.
Wenn du den Aufruf sofort nach dem Laden des "nackten" Dokuments haben möchtest, ggf. noch vor dem Fertigladen externer Ressourcen, dann stell diesen Funktionsaufruf in ein script-Element ganz am Dokumentende.

<script language="JavaScript" type="text/JavaScript">

Das language-Attribut schadet zwar AFAIK nicht, ist aber ausgesprochen nutzlos.

function getPicName()

In dieser Funktion steckt erstens ein Schreibfehler:

var objDateNow = new Date();
   var intTimestamp = objDateNow.time();

Das Date-Objekt hat keine Methode namens 'time'. Unser T-Rex hat vermutlich getTime() gemeint. Die Fehlerkonsole deines Browsers sollte dir aber schon mitgeteilt haben, dass sie mit time() überfragt ist und deshalb an dieser Stelle das Script abbricht.

intTimestamp = intTimestamp - intTimestamp % (60 * 60 * 24);

Und hier ist der zweite Fehler - ein Denkfehler. Nein, eigentlich zwei.
Denn getTime() liefert nicht Sekunden, wie die Berechnung mit 60*60*24 andeutet, sondern Millisekunden. Und selbst wenn es Sekunden wären - einen Timestamp-Wert in Sekunden breche ich nicht auf Tage herunter, indem ich die Sekunden seit Tagesanfang abziehe. Damit normiere ich den Timestamp nur auf 0:00 Uhr.
Richtig - und mit der Deklaration gleich zusammengefasst - wäre es etwa so:

var  intTimestamp = Math.floor(objDateNow.getTime() / (24*60*60*1000));

In Worten: Nimm den ermittelten Timestamp in Millisekunden, dividiere ihn durch 86'400'000, und du erhältst die Anzahl der Tage seit 01.01.1970; davon liefert Math.floor() schließlich nur den ganzzahligen Anteil.

return intTimestamp % 40;
}

Und schließlich bekommst du durch die Modulo-Division diesen Tageszähler in das Intervall 0..39 abgebildet.

Geht aber immer noch nicht. Is irgendwo noch ein Schreibfehler??

Du solltest Fehlermeldungen zur Kenntnis nehmen - und vielleicht auch selbst versuchen, sie zu deuten.

Ciao,
 Martin

--
"Wie geht eigentlich dein neues Auto?"
"Es geht nicht, es fährt!"
"Äh, ja. Und wie fährt es?"
"Och, es geht."
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(