PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Stoppuhr mit Start-/Stoppfunktion


mpala
20.02.2004, 14:15
Ich brauche eine Art Stoppuhr, die so funktionieren soll:
[list=1]
Drücke Button: Start Hochzählen und Anzeigen von Min:Sek -> das geht :-)
Drücke nochmal oder einen anderen Button: Stopp Hochzählen -> das geht nicht :-(
Drücke wiederum: Stoppuhr zählt dort weiter, wo gestoppt wurde.
[/list=1]
Danke für eure Hilfe!

Code sieht momentan so aus und der Zähler zählt einfach durch:

var msec = 0;
var sec = 0;
var min = 0;
var hour = 0;
var pause = 0; // Pause nicht gedrückt

function testPause() {
if (pause == 0) { pause = 1; }
else { pause = 0; }
// while funktioniert nicht, Timer zählt durch:-(
while (pause == 1) {
setInterval("runPause()",100);
break;
}
}

function runPause() {
if (msec >= 9) {
msec = 0;
sec += 1;
if (sec > 59) {
sec = 0
min += 1
if (min > 59) {
min = 0
hour += 1
}
}
}
else { msec += 1; }
// Anzeige im Textfeld
document.disPause.inPause.value = hour + ":" + min + ":" + sec + ":" + msec;
}
:confused:


Jack
20.02.2004, 14:29
Einfacher Grund: Du gehst davon aus, daß in deiner while Schleife in testPause das Interval für runPause nur einmal pro Sekunde gesetzt wird. Es wird aber öfter gesetzt, genauer gesagt, sehr oft hintereinander. Kein Wunder, daß er weiterzählt, denn er kommt mit der Abarbeitung nicht nach.

Besser so:

var msec = 0;
var sec = 0;
var min = 0;
var hour = 0;
var pause = 0; // Pause nicht gedrückt

function testPause() {
if (pause == 0) {
pause = 1;
setInterval("runPause()",100);
} else { pause = 0; }
}

function runPause() {
if (msec >= 9) {
msec = 0;
sec += 1;
if (sec > 59) {
sec = 0
min += 1
if (min > 59) {
min = 0
hour += 1
}
}
if(pause == 1) {
setInterval("runPause()",100);
}
}
else { msec += 1; }
// Anzeige im Textfeld
document.disPause.inPause.value = hour + ":" + min + ":" + sec + ":" + msec;
}

Bhaba
20.02.2004, 22:48
so, hier der code:

<html>
<script>
var csec = 0;
var sec = 0;
var min = 0;
var hour = 0;

function testPause(mode) {
if (mode == 0) {
mode = 1;
}
else if(mode == 1) {
mode = 0;
window.clearInterval(stoppuhr);
}
else if(mode == 2){
window.clearInterval(stoppuhr);
csec = 0;
sec = 0;
min = 0;
hour = 0;
document.disPause.inPause.value = hour + ":" + min + ":" + sec + ":" + csec;
}
while (mode == 1) {
stoppuhr = setInterval("runPause()",100);
break;
}
}

function runPause() {
if (csec >= 9) {
csec = 0;
sec += 1;
if (sec > 59) {
sec = 0
min += 1
if (min > 59) {
min = 0
hour += 1
}
}
}
else {
csec += 1;
}
// Anzeige im Textfeld
document.disPause.inPause.value = hour + ":" + min + ":" + sec + ":" + csec;
}

</script>
<body>
<a href="javascript:testPause(0);">Weiter(Start)</a><br>
<a href="javascript:testPause(1);">Stopp</a><br>
<a href="javascript:testPause(2);">Reset</a><br>

<form name="disPause">
<input type="text" name="inPause" value="---">
</form>
</body>
</html>


...nichts geht doch über ein so freundliches "window.clearInterval()", nicht waaah? ;)

-----------------------------------------------------------------------------
edit: achtung beim copy&paste
das "javascript" im <a>- Tag wird laut Einstellung durch ein Leerzeichen unbrauchbar gemacht, sehe ich gerade...