Statuszeile bewegt sich nicht

Yoda

Gesperrt
Tag auch,
ich hab ein kleines Problem:
Ich habe ein etwas größeres Javascript mit einigen Funktionen bei denen Das aktuelle Datum Die Onlinezeit und eine Begrüßung in der Statusleiste ausgegeben werden sollen. Das Funktioniert auch schon jedoch bewegt sich die Statusleiste nicht obwohl sie das sollte.
Erstmal hier die stp.js:
PHP:
startday = new Date();
clockStart = startday.getTime();
function initStopwatch()
{
    var myTime = new Date();
        var timeNow = myTime.getTime();
        var timeDiff = timeNow - clockStart;
        this.diffSecs = timeDiff/1000;
        return(this.diffSecs);
}

function getSecs()
{
        var mySecs = initStopwatch();
        var mySecs1 = ""+mySecs;
        mySecs1= mySecs1.substring(0,mySecs1.indexOf("."));
        lauftext2 = "Du bist jetzt "+mySecs1+" Sekunden hier.   ~   ";
        window.setTimeout('getSecs()',1000);
}

/* Uhrzeit und Datum in der Statuszeile */

var timerID = null;

var timerRunning = false;

// Called by both onLoad in BODY tag, and Resume button.

function startclock ()

   {

   // Make sure the clock is stopped

   stopclock();

   time();

   }

// Kills clock.

function stopclock ()

   {

   if(timerRunning)

      clearTimeout(timerID);

   timerRunning = false;

   }

function time ()

   {

   var now = new Date();

   var yr = now.getYear();
if (yr < 2000) yr +=1900
   var mName = now.getMonth() + 1;

   var dName = now.getDay() + 1;

   var dayNr = now.getDate();

   var hours = now.getHours();

   var minutes = ((now.getMinutes() < 10) ? ":0" : ":") + now.getMinutes();

   var seconds = ((now.getSeconds() < 10) ? ":0" : ":") + now.getSeconds();

   if(dName==1) Day = "Sonntag";

   if(dName==2) Day = "Montag";

   if(dName==3) Day = "Dienstag";

   if(dName==4) Day = "Mittwoch";

   if(dName==5) Day = "Donnerstag";

   if(dName==6) Day = "Freitag";

   if(dName==7) Day = "Samstag";

   if(mName==1) Month="Januar";

   if(mName==2) Month="Februar";

   if(mName==3) Month="März";

   if(mName==4) Month="April";

   if(mName==5) Month="Mai";

   if(mName==6) Month="Juni";

   if(mName==7) Month="Juli";

   if(mName==8) Month="August";

   if(mName==9) Month="September";

   if(mName==10) Month="Oktober";

   if(mName==11) Month="November";

   if(mName==12) Month="Dezember";

   // String to display current date.

   var DayDateTime=(" "

       + Day

       + "   "

       + dayNr

       + ". "

       + Month

       + " "

       + yr

       + "   "

       + hours

       + minutes

       + seconds

        );

   // Displays Day-Date-Time on the staus bar.

   lauftext3 = "Heute ist " + Day + " der " + dayNr + ". " + Month + " " + yr + ". Es ist genau " + hours + minutes + seconds + " Uhr.   ~   ";

   timerID = setTimeout("time()",1000);

   timerRunning = true;

   }

// Stops clock and clears status bar.

function clearStatus()

   {

   if(timerRunning)

      clearTimeout(timerID);

   timerRunning = false;

   window.status=" ";

   }
   function willkommen()
{
   lauftext4 = lauftext + lauftext2 + lauftext3;
   window.status = lauftext4;
   lauftext4 = lauftext4.substring(1, lauftext4.length) + lauftext4.substring(0,1);
   setTimeout("willkommen()", 130);
}
Die einzelnen Funktionen bracuht ihr euch nicht umbedingt ansehen, denn das Datum und die Onlineziet werden ja schliesslich richtig errechnet.
Hier noch ein auszug aus meiner index.php in der der Text in der Statusleiste ausgegeben werden soll:
PHP:
...
<script language="javascript" type="text/javascript">
<?php
  echo "var lauftext = \"   Willkommen auf Shock-the-Public.de, ".$username.".   ~   \";";
 ?>
 var lauftext2 = "";
 var lauftext3 = "";
</script>
<script type="text/javascript" src="stp.js"></script>
</script>
</head>
<body background="bg.gif" onload="startclock();window.setTimeout('getSecs()',1);willkommen();">
...
Ich hoffe jemand kann mir helfen
MfG Yoda
 
Zuletzt bearbeitet:
Hallo,

also zunächst würde ich dir empfehlen, die ganzen if-Abfragen für Wochentag und Monat zu ersetzen, z.B. so:
Code:
Week = new Array('Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag');
Day = Week[dname-1];

// ähnlich für den Monat

Das sollte dein Script beschleunigen.

Dein Fehler liegt wohl hier:
Code:
function willkommen()
{
   lauftext4 = lauftext + lauftext2 + lauftext3;
   window.status = lauftext4;
   lauftext4 = lauftext4.substring(1, lauftext4.length) + lauftext4.substring(0,1);
   setTimeout("willkommen()", 130);
}

Du setzt lauftext4 immer aus den unveränderten lauftext bis lauftext3 zusammen und gibst sie als window.status aus. Danach änderst du lauftext4. Das ist zwar schön und gut, nur bei dem neuen Aufruf von willkommen() wird lauftext4 wieder überschrieben.

Gruß
Falk
 
PHP:
var pos = 0
function willkommen()
{
   lauftext4 = lauftext + lauftext2 + lauftext3;
   lauftext4 = lauftext4.substring(pos, lauftext4.length) + lauftext4.substring(0,pos);
   pos = pos + 1
   if(pos > lauftext.length-1)
   {
    pos = 0
   }
   window.status = lauftext4;
   setTimeout("willkommen()", 130);
}

So müsste das funktionieren.
1. Fehler: window.status wird immer den Ausgangstext darstellen, da nach window.status erst der Text angepasst wurde.
2. Fehler: Du hast keinen Counter drin, der die Position der
derzeitigen Änderung enthält.
Danach muss überprüft werden, ob die Position gültig ist.

Müsste so funktionieren.
NICHT GETESTET!!!
 
Nachtrag:

Deine Zeit wird nie aktualisiert, das heißt: Wenn jemand einige Minuten oder länger auf deiner Seite verweilt, ohne sie neu zu laden, dann wird er immer die Zeit der letzten Aktualisierung und nicht die aktuelle Zeit angezeigt bekommen.

Du solltest deshalb in willkommen() zuerst die Funktion time() aufrufen, um die Zeit zu aktualisieren.

Gruß
Falk
 
Schon mal danke für die Hilfe aber das funktioniert immer noch nicht so ganz.
Ich poste nochmal den aktuellen Code der stp.jss:
PHP:
startday = new Date();
clockStart = startday.getTime();
function initStopwatch()
{
    var myTime = new Date();
        var timeNow = myTime.getTime();
        var timeDiff = timeNow - clockStart;
        this.diffSecs = timeDiff/1000;
        return(this.diffSecs);
}

function getSecs()
{
        var mySecs = initStopwatch();
        var mySecs1 = ""+mySecs;
        mySecs1= mySecs1.substring(0,mySecs1.indexOf("."));
        lauftext2 = "Du bist jetzt "+mySecs1+" Sekunden hier.   ~   ";
        window.setTimeout('getSecs()',1000);
}

/* Uhrzeit und Datum in der Statuszeile */

var timerID = null;

var timerRunning = false;

// Called by both onLoad in BODY tag, and Resume button.

function startclock ()

   {

   // Make sure the clock is stopped

   stopclock();

   time();

   }

// Kills clock.

function stopclock ()

   {

   if(timerRunning)

      clearTimeout(timerID);

   timerRunning = false;

   }

function time ()

   {

   var now = new Date();

   var yr = now.getYear();
if (yr < 2000) yr +=1900
   var mName = now.getMonth() + 1;

   var dName = now.getDay() + 1;

   var dayNr = now.getDate();

   var hours = now.getHours();

   var minutes = ((now.getMinutes() < 10) ? ":0" : ":") + now.getMinutes();

   var seconds = ((now.getSeconds() < 10) ? ":0" : ":") + now.getSeconds();

   if(dName==1) Day = "Sonntag";

   if(dName==2) Day = "Montag";

   if(dName==3) Day = "Dienstag";

   if(dName==4) Day = "Mittwoch";

   if(dName==5) Day = "Donnerstag";

   if(dName==6) Day = "Freitag";

   if(dName==7) Day = "Samstag";

   if(mName==1) Month="Januar";

   if(mName==2) Month="Februar";

   if(mName==3) Month="März";

   if(mName==4) Month="April";

   if(mName==5) Month="Mai";

   if(mName==6) Month="Juni";

   if(mName==7) Month="Juli";

   if(mName==8) Month="August";

   if(mName==9) Month="September";

   if(mName==10) Month="Oktober";

   if(mName==11) Month="November";

   if(mName==12) Month="Dezember";

   // String to display current date.

   var DayDateTime=(" "

       + Day

       + "   "

       + dayNr

       + ". "

       + Month

       + " "

       + yr

       + "   "

       + hours

       + minutes

       + seconds

        );

   // Displays Day-Date-Time on the staus bar.

   lauftext3 = "Heute ist " + Day + " der " + dayNr + ". " + Month + " " + yr + ". Es ist genau " + hours + minutes + seconds + " Uhr.   ~   ";

   timerID = setTimeout("time()",1000);

   timerRunning = true;

   }

// Stops clock and clears status bar.

function clearStatus()

   {

   if(timerRunning)

      clearTimeout(timerID);

   timerRunning = false;

   window.status=" ";

   }
   var pos = 0
   function willkommen()
{
   startclock();
   lauftext4 = lauftext + lauftext2 + lauftext3;
   lauftext4 = lauftext4.substring(1, lauftext4.length) + lauftext4.substring(0,1);
   pos = pos + 1
   if(pos > lauftext.length-1)
   {
    pos = 0
   }
   window.status = lauftext4;
   setTimeout("willkommen()", 130);
}

Die Statuszeile steht immer noch still. Ausserdem wird bei jedem neuladen der Seite der Sekunden-Zähler zurückgesetzt.
MfG Pcnub
 
Hallo,

er scrolled jetzt ;) -> siehe Anhang...

zum Counter reset: Man kann ihn umgehen - aber unnötig aufwendig:
1) Du arbeitest mit Framesets. Im Frameset wird das Script eingefügt, somit bleibt dir der Zählerstatus auch beim Surfen auf der Page erhalten.

2) Du schreibst eine Funktion, welche bei "onUnload" ein Cookie setzt, welches den aktuellen Counter speichert. Dieses Cookie ließt du auf der neuen Seite sofort wieder ein und zählst beim alten Counter weiter.

3) Du schreibst eine Funktion welche bei dir beim Verlassen, den aktuellen Counter mit an die URL hängt (Stichwort: window.location.search), der Rest wie bei den Cookies - kann aber sehr sehr Aufwendig werden (habs nicht ganz durchdacht).

bye
 

Anhänge

Zuletzt bearbeitet:
Also erstmal danke ich werde das Script direkt mal probieren.
Aber eine Cookie zu setztenhalte ich für unnötig, denn ich will ja nur das die Zeit in Sekunden für genau eine Siztung gemessen wird. Es soll bloß eine Reloadsperre vorhanden seien. Ein Frameset verwende ich nicht auf der Seite aber das kann ich dann ja ganz einfach lösen:
PHP:
<frameset rows="100%,*">
<frame src="index.php">
<frame src="status.php">
die status.php wird ja , da kein link darauf verweisst nie neugeladen, also sollte es funktionieren.
Schönen Tag noch
MfG Yoda
 

Neue Beiträge

Zurück