mehrere Counter auf einer Seite

Status
Nicht offen für weitere Antworten.

mastermannrw

Mitglied
Hallo Community,

nachdem ich mir die Treffer der Suche angesehen habe, stellt sich mir die Frage, wie ich es hinbekomme, mehrere Counter auf einer Seite zu benutzen.

Problemstellung:

Es werden auf einer Seite mehrere Counter angezeigt. Alle Counter können verschiedene Werte enthalten. Es kann auch sein, das der Counter nicht angezeigt wird. Je nachdem, was vorher im PHP Script gelaufen ist.

Eine Möglichkeit die es sicher gibt wäre den Countercode mehrfach einzusetzen. Das möchte ich aber, wenn es geht vermeiden.
Wer kennt ein Counter, oder eine Möglichkeit, eine Counter mehrfach zu benutzen?

Sollte Ihr Code Posten, bitte ich darum diesen zu kommentieren, da ich bei Java Script noch nicht wirklich durchsteige.

Danke
 
Vielleicht solltest du erstamal erläutern, was du unter "counter" verstehst... das was ich darunter verstehe(Anzeige von statistiscehen Daten... User Online, Seitenaufrufe etc.) lässt sich mit Javascript überhaupt nicht bewerkstelligen.
 
So eine art Countdown. Stimmt, habe ich irgendwie vergessen. Woher solltet Ihr auch wissen, was ich denke. :)

Es wir eine Zeit in sekunden vorgegeben und der Counter (Countdown) zählt bis 0 runter. Soweit kein Thema. Interessant wird es nun, wenn auf einer Seite mehrer Counter laufen sollen. Da hab ich dann das Problem. Allerdings könnte es sein, das ich kurz vor einer Lösung stehe. Sollte das nicht klappen, poste ich die Codefragmente mal, damit da mal jemand drüber sehen kann.
 
Code:
<script type="text/javascript">
var NS6 = (!document.all && document.getElementById) ? true : false;
var NS = document.layers ? 1:0;
var IE = document.all ? 1:0;
var gecko = document.getElementById ? 1:0;
var target;
var wielange;
function countdown(wielang,target)
{
    sekunden=wielang;
    stunden=Math.floor(sekunden/3600);
    sekunden-=stunden*3600;
    minuten=Math.floor(sekunden/60);
    sekunden-=minuten*60;
    text=stunden+":"+minuten+":"+sekunden;
    if(sekunden <= 9) {
	text=stunden+":"+minuten+":0"+sekunden;}
	if(minuten <= 9) {
	text=stunden+":0"+minuten+":"+sekunden;
	if(sekunden <= 9 && minuten <=9) {
	text=stunden+":0"+minuten+":0"+sekunden;}}
    
    if (NS)
    {
        x = document.layers[target];
        text2 = '<p>' + text + '</p>';
        x.document.open();
        x.document.write(text2);
        x.document.close();
    }
    else if (IE)
    {
        x = document.all[target];
        x.innerHTML = text;
    }
    else if (gecko)
    {
        x = document.getElementById(target);
        x.innerHTML = text;
    }
    wielange=wielang-1;
    if (wielang!=0) {
	window.setTimeout("countdown(wielange,\\""+target+"\\");",1000)
    }
    else
    window.setTimeout("countdown(00:00:00);")
}
</script>

Das ist nun der Countdown Code. Und nun noch der Code zum Aufruf:

Code:
<span id=\"turnier\">..load..</span><script type=\"text/javascript\">countdown(".$temp.",\"turnier\")</script>

Wobei $temp die Anzahl der Sekunden ist.

Nun das Problem:
Positiv: Der Countdown läuft an mehreren Stellen der Seite.
Negativ: Leider nur mit den letzten Wert der einem dieser Counter übergeben wird.

Zur Lösung:
Bei den Überlegungen die ich angestellt habe, bleibe ich dort hängen, wie Javacsipt funktioniert. Wenn ich mit der Annahme richitg liege, das immer wieder der gleiche Code Aufgerufen wird (sollte ja so sein) dann ist das natürlich logisch. Stellt sich die Frage, wie ich mehrer "Instanzen" des Codes erzeugen/aufrufen kann.

Hoffe, das mir jemand helfen kann.
 
Da "wielange" ausserhalb der Funktion deklariert wurde, wird dort von allen Aufrufen aus zugegriffen.. und überschrieben.

Die Lösung... übergebe die Restzeit direkt mit dem setTimeout()... dann bleibts für jeden Countdown separat, da nicht global verfügbar.

Nen etwas kürzeres Skript, welches das macht:
Code:
<script type="text/javascript">
<!--
intObjs = 0;
function nullen(intInt)
{
    return(intInt<10) ? '0' + intInt.toString() : intInt;
}

function countdown(wielang, intTarget)
{
    if(document.getElementById)
        {
            try
                {
                    if(countdown.arguments.length > 1)
                        {
                            
                            intHrs = Math.floor(wielang / 3600);
                            intMins= Math.floor((wielang % 3600) / 60);
                            intSecs= wielang % 60;
                            document.getElementById('count_'+intTarget).firstChild.data = 
                                        nullen(intHrs) + ':' +
                                        nullen(intMins)+ ':' +
                                        nullen(intSecs);
                        }
                    else
                        {
                            intTarget = intObjs;
                            document.write('<span id="count_'+intObjs+'">...load..</span>');
                            intObjs++;
                        }
                    if(wielang > 0)
                        {
                            window.setTimeout('countdown('+(wielang-1)+','+intTarget+')',1000);
                        }
                 }
             catch(e){}
                
        }
}
//-->
</script>

der Aufruf über
Code:
countdown(12345)
...an der jeweiligen Stelle im Dokument... den span mit der ID erzeugt das Skript selbst, kannst du dir also sparen.
 
Danke, funktioniert super. Ich gehe davon aus, das ich den Code verwenden darf?

Hat mich glatte 10 Stunden rumprobieren gekostet.

Angenommen ich möchte jetzt, das bei dem Stand von 0 beinem der Countdows eine bestimmte Seite geldane wird, wo und wie müßte man das dann noch einbinden?
Ist das sinnvoll sowas zu tun?
 
Zuletzt bearbeitet:
Hab ich doch geahnt, dass da noch was kommt :)

Code:
<script type="text/javascript">
<!--
intObjs = 0;
function nullen(intInt)
{
    return(intInt<10) ? '0' + intInt.toString() : intInt;
}

function countdown(intSeconds, intTarget,strCmd)
{
    if(document.getElementById)
        {
            try
                {
                    if(countdown.arguments.length > 2)
                        {

                            intHrs = Math.floor(intSeconds / 3600);
                            intMins= Math.floor((intSeconds % 3600) / 60);
                            intSecs= intSeconds % 60;
                            document.getElementById('count_'+intTarget).firstChild.data =
                                        nullen(intHrs) + ':' +
                                        nullen(intMins)+ ':' +
                                        nullen(intSecs);
                        }
                    else
                        {
                            strCmd=(countdown.arguments.length>1)?countdown.arguments[1]:'';
                            intTarget = intObjs;
                            document.write('<span id="count_'+intObjs+'">...load..</span>');
                            intObjs++;
                        }
                    if(intSeconds > 0)
                        {
                            window.setTimeout('countdown('+(intSeconds-1)+','+intTarget+',\''+strCmd+'\')',1000);
                        }
                    else
                        {
                            eval(strCmd);
                        }

                 }
             catch(e){}

        }
}
//-->
</script>
beim Funktionsaufruf kannst du jetzt einen 2.Parameter angeben... und zwar eine JS-Anweisung, welche bei 0 ausgeführt wird.
z.B.

Code:
countdown(60,'window.location="andere_seite.htm"');

Test:mehrere Countdown auf einer Seite


Den Code kannst du natürlich verwenden, dazu ist er da.
 
Hallo das geht ja prächtig ,


nun habe ich aber auch mal eine frage :

Wie mach ich es das beim beenden des countdowns statt 00:00:00 ein link da steht ,

also wie sieht da die befehlszeile aus ?


mfg
 
Hallöle, da bin ich wieder.

Jetzt kommt noch das Prob dazu, das ich auch eine Uhrzeit weiterzählen soll. Muß ich dafür dann wieder einen neuen Code einbauen, oder kann man dem Countdown auch das "Countup" :) beibringen?
Ich sagte ja schon mal, das Java Script für mich echt noch böhmische Dörfer sind. Noch kein schnall, aber ich gelobe Besserung, denn ich hab schon ein Buch, um mir den EInstig zu ermöglichen, aber leider keine Zeit zum Lesen. <-Ups OffTopic, sorry.
Frage ist also: Kann der auch anders herum?

Danke für Eure hilfe.
 
Status
Nicht offen für weitere Antworten.

Neue Beiträge

Zurück