Avatar billede ASPAmatoer16 Nybegynder
21. juni 2010 - 21:41 Der er 15 kommentarer og
1 løsning

Kun 1 countdown / nedtæller pr. side??? Javascript

Hej eksperter!

- Jeg har et lidt besynderligt spørgsmål synes jeg selv..

Kan det virkelig passe jeg kun kan have 1 nedtæller på hver side?? :s

Jeg har pt lavet en nedtæller til det jeg kalder mine bygninger.
Men jeg har nogle råstoffer jeg også vil have en på - det vil sige mindst 2 live nedtællere..
Lige så snart jeg prøver, at lave en anden nedtæller - går den ene i stå (bliver bare blank) og den anden begynder, at køre.
Mit spørgsmål er så om det kan passe, eller om jeg gør noget forkert?

Her er den kode jeg bruger til min nedtæller:

<%
    Dim BuildingWork1
    BuildingWork1 = DateDiff("s", Now(), VHenter("BuildingWork1"))
    '.........server processing
%>
<script type="text/javascript">
var nTime = "<%= BuildingWork1 %>"; // <-- Indskriv antal sekunder med PHP

function countDown() {
    var nH = Math.floor(nTime/3600),
    nRest = nTime%3600,
    nM = Math.floor(nRest/60),
    nS = nRest%60;
    if (nM<10) nM = "0" + nM;
    if (nS<10) nS = "0" + nS;
    oTime.firstChild.nodeValue = (nH+":"+nM+":"+nS);
    if (nTime==0) {
        location.reload(true)
    } else {
        nTime--;
        setTimeout("countDown()", 1000);
    }
}
var oTime = null;
window.onload = function() {
    oTime = document.getElementById("TimeBuildingWork1");
    countDown();
}
</script>

<div style="color:#009"><span id="TimeBuildingWork1">&nbsp;</span></div>



Mine forsøg:
- Jeg har prøvet andre slags Javascript nedtællere
- Jeg har ændret alle de steder i min kode hvor der står "TimeBuildingWork1" og "BuildingWork1" for, at ændre nedtællerens identifikationsmomenter.. Virker dog stadig ikke..


Nogen foreslag?
Avatar billede Slettet bruger
21. juni 2010 - 22:13 #1
setTimeout returnerer et "handle" til timeren... (og ja, du kan sagtens have mere end en)

Jeg forstår ikke meningen med hele den komplicerede beregning i countDown()
- virker unødvendigt når funktionen alligevel kaldes præcis 1 gang pr. sekund!

Hvis du tæller et antal sekunder ned - f.eks. fra 30 til 0 - og så reloader.
- kunne du blot trække 1 fra nTime, og vise resultatet direkte.
Avatar billede ASPAmatoer16 Nybegynder
21. juni 2010 - 22:18 #2
Tror ikke jeg forstår helt..

Hvordan ville du lave en simpel countdown - hvor det enten er Sekunder, Minutter eller Timer der skal indsættes som data til beregning af tiden der skal nedtælles..?

Hvad skal jeg eventuelt gøre for, at det ikke går galt?
Avatar billede Slettet bruger
21. juni 2010 - 23:11 #3
Tog mig lige sammen og læste "den komplicerede beregning" - og den GØR faktisk som jeg foreslog : )

Problemet med to sideløbende timere = (iE)problemet at benytte parametre i funktionen som kaldes af setTimeout.
Se evt:http://www.lejnieks.com/2008/08/21/passing-arguments-to-javascripts-settimeout-method-using-closures/

forslag (utestet) - Kunne sikkert gøres mere "elegant" med en class, men pyt : )

var nTime1 = "<%= BuildingWork1 %>"; // <-- Indskriv antal sekunder med PHP
var nTime2 = "<%= BuildingWork2 %>"; // <-- Indskriv antal sekunder med PHP

function countDown( nr )
    {
    var nTime = eval("nTime"+nr)
    var nH = Math.floor(nTime/3600)
    nRest = nTime%3600
    nM = Math.floor(nRest/60)
    nS = nRest%60
    if (nM<10)
        nM = "0" + nM
    if (nS<10)
        nS = "0" + nS

    document.getElementById("TimeBuildingWork"+nr).firstChild.nodeValue = (nH+":"+nM+":"+nS)

    if (nTime==0)
        location.reload(true) // skuffende..?
    else
        nTime--
    }

function counter1()
    {
    countDown(1)
    }

function counter2()
    {
    countDown(2)
    }

window.onload = function()
    {
    setInterval("counter1()",1000)
    setInterval("counter2()",1000)
    }
</script>

<div style="color:#009"><span id="TimeBuildingWork1"> </span></div>
<div style="color:#009"><span id="TimeBuildingWork2"> </span></div>
Avatar billede ASPAmatoer16 Nybegynder
21. juni 2010 - 23:26 #4
Det ser desværre ikke ud til, at virke helt korrekt..? :s

Jeg kan kun få den ene til, at vise den korrekte formel - men den ene tæller så ikke ned uden refresh.. :s
Avatar billede Slettet bruger
21. juni 2010 - 23:46 #5
Ahh, vi skal lige have skrevet tilbage til variablerne efter nedtælling:

...
..
    if (nTime==0)
        location.reload(true) // skuffende..?
    else
        nTime--
    }

rettes til:

...
..
    if (nTime==0)
        location.reload(true) // skuffende..?
    else
        eval("nTime"+nr+" = "+(--nTime)
    }
Avatar billede ASPAmatoer16 Nybegynder
22. juni 2010 - 00:41 #6
Er det her en kode du har testet? For vil gerne være sikker på det ikke er mig der gør noget forkert.. Kan stadig ikke få koden til, at virke desværre :s
Avatar billede Slettet bruger
22. juni 2010 - 17:30 #7
Jeps, virker i både Firefox, Chrome og Opera

<HTML><head><script>
var nTime1 = "1000"
var nTime2 = "200"

function countDown( nr )
    {
    var nTime = eval("nTime"+nr)


    var nH = Math.floor(nTime/3600)
    nRest = nTime%3600
    nM = Math.floor(nRest/60)
    nS = nRest%60
    if (nM<10)
        nM = "0" + nM
    if (nS<10)
        nS = "0" + nS

    document.getElementById("TimeBuildingWork"+nr).firstChild.nodeValue = (nH+":"+nM+":"+nS)

    if (nTime==0)
        location.reload(true) // skuffende..?
    else
        eval("nTime"+nr+" = "+(--nTime))
    }

function counter1()
    {
    countDown(1)
    }

function counter2()
    {
    countDown(2)
    }

window.onload = function()
    {
    setInterval("counter1()",1000)
    setInterval("counter2()",1000)
    }
</script></head><body>

1: <div style="color:#009"><span id="TimeBuildingWork1"> </span></div>
2: <div style="color:#009"><span id="TimeBuildingWork2"> </span></div>

</body></html>
Avatar billede ASPAmatoer16 Nybegynder
22. juni 2010 - 22:52 #8
Tusinde tak for hjælpen. Koden fungerer efter hensigten! :)
Avatar billede ASPAmatoer16 Nybegynder
30. juni 2010 - 00:03 #9
Egentlig burde du ikke have haft dine point endnu..
Hvorfor virker denne kode ikke i explorer!? :s
Nytter ikke, at et browser spil ikke virker i den browser der er mest benyttet..
Avatar billede Slettet bruger
30. juni 2010 - 13:23 #10
Hmm... det ved jeg ikke - hvor går det galt ?
Avatar billede ASPAmatoer16 Nybegynder
30. juni 2010 - 15:21 #11
Den viser ikke nedtællingen i IE browseren..
er bare blank..
Avatar billede Slettet bruger
01. juli 2010 - 00:46 #12
Så må du igang med at debugge : )
- indsæt f.eks. en alert("nu 123") først og sidst i hver af de 4 funktioner...
Avatar billede ASPAmatoer16 Nybegynder
01. juli 2010 - 00:57 #13
Forstår slet ikke hvad de der "alert"'er skal gøre godt for desværre??

Du kan ikke se hvor problemet eventuelt kan være?? Siden det kun er IE browseren den ikke virker i..?
Avatar billede Slettet bruger
01. juli 2010 - 01:24 #14
Godt så. Gammel XP støvet af (32 "important updates" i kø, suk)...

Det skyldes at de to spans - med det enkelte mellemrum. iE ignorerer åbenbart mellemrummet - hvorfor span'erne ikke har noget firstChild.

SÅ - ret denne linje:

document.getElementById("TimeBuildingWork"+nr).firstChild.nodeValue = (nH+":"+nM+":"+nS)

Til:

document.getElementById("TimeBuildingWork"+nr).innerHTML = (nH+":"+nM+":"+nS)
Avatar billede ASPAmatoer16 Nybegynder
01. juli 2010 - 01:55 #15
Du skal have mange tak for hjælpen!
Så det er simpelthen pga. innterHTML.. Godt at vide - tak igen!
Avatar billede ASPAmatoer16 Nybegynder
01. juli 2010 - 01:56 #16
innerHTML*
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester