Sekundenzähler wie bei Onlinegames
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anweisung
aufrufen
backup
beitrag
board
countdown
counter
funktion
haben
klicken
kumpel
minute
referenz
sekunde
sen
set
stufen
suchfunktion
update
verstehe
-
Hallo, sicher kennt ihr das von den Online-Browsergames:
Wenn man etwas bauen oder ausbilden will, dann klickt man auf einen Link, und dann wird angezeigt:
fertig in 0:10:02h Also 10 Minuten, 2 Sekunden.
Wenn ich dann warte, bis er auf 9 Minuten heruntergez?hlt hat und dann aktualisiere, z?hlt er von 9 Minuten weiter herunter, wie kann ich soetwas realisieren? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi,
wenn du willst, dass sich der Z?hler st?ndig aktualisiert, dann geht das nicht mit PHP, aber z.B. mit Javascript w?rde es eghen.
mfg,
hr -
Und wie kann ich das dann machen?
Code oder so?????? -
Ah, danke.
Aber wie kann ich die Zeit f?r den Javascriptcounter ablaufen lassen?
Denn sonst z?hlt der ja bei jedem reload neu.
Hier das Javascript:
<input value="0" type="text" readonly="readonly" id="XY" /> <script> function countdown(ele,starter) { document.getElementById(ele).value=starter; starter--; setTimeout('countdown("'+ele+'",'+starter+')',1000); } countdown('XY',500); </script>
-
Hi,
der beste Weg, um dieses Problem zu l?sen ist, wenn man die vergangene Zeit im query speichert.
So sollte es gehen (ich musste da noch einige Funktionen erfinden, aber so gehts'):
<input value="0" type="text" readonly="readonly" id="XY" /> <a href="javascript:submitp()">Klick</a> <script language="JavaScript" type="text/javascript"> <!-- var p = getquery('p'); var starter = p != null ? p : 500; var el = 'XY'; var timeout; function getquery(key) { var k,kv; var query = window.location.search.substr(1).split('&'); for (k in query) { kv = query[k].split('='); if (kv[0] == key) return kv[1]; } return null; } function countdown() { document.getElementById(el).value = starter; starter--; timeout = setTimeout('countdown()',1000); } function submitp() { clearTimeout(timeout); self.location.href = '?p=' + starter; } countdown(); //--> </script>
Man k?nnte satt nur den Sekunden auch noch Minuten usw. anzeigen, aber so gehts auch. Ich hoffe, es hilft weiter.
Ich finde man sollte diesen Threat ins Javascript & HTML Forum verschieben.
mfg,
hr
Beitrag ge?ndert am 15.05.2006 01:11 von heavyraptor -
Es geht noch wesentlich leichter (alles in javascript):
Du nimmst als referenz einen festen timestamp (die zeit an dem das wasauchimmer fertig ist) und dann l?sst du die aktuelle zeit (auch als timestamp) immer von dem abziehen (bauste in ne funktion die sich st?ndig aktualisiert: s.o.). Das was ?brig bleibt ist die ?brige zeit in sekunden. Kannste dann halt noch sch?n formatieren und fertig.
Kann so oft relaodet werden wis du willst, spuckt immer die richtiger zeit aus... -
Sorry, aber den Code von heavyraptor verstehe ich nicht.
Aber, ich w?rde das gerner auf MySQl-DBs laufen lassen. -
Also, ich w?rde es auch mit JS machen, aber mit nem Cronjob ist das wesentlich einfacher.
Speddtouch92 was ist daran nicht zu verstehen??
Er hat nen Javascript Countdown, wen man den
Link klickt, wird der Countdown im In?put angezeigt wenn er abgelaufen ist wird er
auf die Seite: ?p= weitergeleitet
Beitrag ge?ndert am 15.05.2006 16:46 von gollum1990 -
Nunja, also, ich verstehe das immer nocht nicht.
Aber, wenn ich die Seite (wo gez?hlt wird) verlase, dann will ich, dass er weiterz?hlt.
Also beim Seitenaufruf nicht wieder neu anf?gt.
Und, man sollte mit php ?berpr?fen k?nnen, ob der Countdown auch abgelaufen ist. -
Da gibst nics zu verstehen.
Noch mal so:
Klick-> Countdown Startet (Sieht man Input)
Verlassen der Seite-> Countdown l?uft weiter
Countdown abgelaufen -> auf die seite ?p=Beispielhaus weitergeleitet
Die Seite beinhaltet das Update der Stufe der
Z?rucksetzung der Zeit in der Datenbank.
Ok man sollte noch ne if else Anweisung machen
bei der Countdown Seite und fertig, da haste dein
hast den Z?hler.
Beitrag ge?ndert am 15.05.2006 16:56 von gollum1990 -
Und wo muss ich dann die Zeit eintragen, die gez?hlt werden muss?
Also, ich hoffe, wir sprechen nun beide von diesem Code:
<input value="0" type="text" readonly="readonly" id="XY" /> <a href="javascript:submitp()">Klick</a> <script language="JavaScript" type="text/javascript"> <!-- var p = getquery('p'); var starter = p != null ? p : 500; var el = 'XY'; var timeout; function getquery(key) { var k,kv; var query = window.location.search.substr(1).split('&'); for (k in query) { kv = query[k].split('='); if (kv[0] == key) return kv[1]; } return null; } function countdown() { document.getElementById(el).value = starter; starter--; timeout = setTimeout('countdown()',1000); } function submitp() { clearTimeout(timeout); self.location.href = '?p=' + starter; } countdown(); //--> </script>
-
Also mach nen Query Update so:
UPDATE `bauen` SET `zeit` = '".$zeit."'
die If abfrage:
if($row['zeit'] < 1)
{
//Bauen
}
else
{
//countdown
}
Bevor du wieder fragst hier einfach Z?hler f?r nen
Bauscript:
[code]
<html>
<head>
<title>SekundenZ?hler</title>
<script language="JavaScript">
<!--
function countdown() {
timer = document.getElementsByName('countdown');
for (i = 0; i <= timer.length - 1; i++) {
zeit = timer.title;
zeit = zeit - 0.5;
if (zeit > 0) {
minuten = 0;
stunden = 0;
if (zeit > 59) {
minuten = Math.floor(zeit / 60);
}
sekunden = Math.floor(zeit - minuten * 60);
if (sekunden < 10) {
sekunden = "0" + sekunden;
}
if (minuten < 10) {
minuten = "0" + minuten;
}
timer.firstChild.nodeValue = minuten + ":" + sekunden;
timer.title = zeit;
}else {
timer.firstChild.nodeValue = "Fertig";
}
}
window.setTimeout("countdown()", 500);
}
countdown();
//-->
</script>
</head>
<body onload="countdown()">
<?php
$auslesen = mysql_query("SELECT * FROM bauen");
$while($row = mysql_fetch_array($auslesen))
{
if($row['zeit'] < 1)
{
echo '<a href="deinscript.php">Bauen</a>';
}
else
{
echo '<span id="countdown">'.$row['zeit'].'<br>';
}
?>
</body>
</html>
Beitrag ge?ndert am 15.05.2006 22:02 von gollum1990 -
Hi,
ich bin eigentlich auch der Meinung wie theuntouchables, dass man mit einem timestamp arbeitet. Es ist einfacher und praktischer zum rechnen.
Ich hab einfach die gegebene Funktion noch ausgebaut.
mfg,
hr -
@gollum1990
erkl?r ma bitte noch ma genau wie du des meinst weil wenn ich des script aufrufe(den timer) is mir aufgefallen dass wenn ma auf Klick klickt es schneller runter geht und wenn ma auf zur?ck geht wird der counter resetet. meine frage: is des nicht auch mit net auch mit einer Zwischenspeicherung, also einem "Backup" auf der DB m?glich? Oder versteh ich dein Script nur grad total net.....btw hab kaum ahnung mit JavaScript ;).
Ich hab von nem Kumpel auch ein Timer geschickt bekommen der allerdings als solches besser fungiert als dein geposteter. K?nntest du mir da eventuell beim anpassen helfen? W?r super nett. Hier is Script:
<html>
<head>
<title>Timer</title>
<script language="javascript">
var start = new Date();
var link = "http://thedarksniper.de.vu";
function timer(sec)
{
var time = new Date();
var diff = time - start;
var text = document.getElementById("zeit");
if(((sec*1000)-diff)>=0)
{
var s = (sec-((diff/1000)-((diff/1000)%1)));
var m = ((s/60-(s/60)%1)%60);
var h = (s/3600-(s/3600)%1);
text.innerHTML = h + ":" + m + ":" + (s%60);
setTimeout('timer('+sec+')',1000);
}
else
{
text.innerHTML = "<a href=\""+link+"\">weiter</a>";
}
}
</script>
</head>
<body onload="timer(10)">
<b>
<span id="zeit"></span>
</b>
</body>
</html>
Thx schon mal im vorraus
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage