Avatar billede tipman Juniormester
30. januar 2021 - 12:36 Der er 5 kommentarer

Countdown fra php array

Jeg er rigtig dårlig til javascript og mangler lidt hjælp.

Jeg har lavet en hjemmeside i php. I den forbindelse har jeg lavet et array med nogle tider ala:
cd[1]['sekunder']=60;
cd[2]['sekunder']=88;
cd[3]['sekunder']=48;
cd[4]['sekunder']=56;

Jeg har brug for et javascript som først tager cd[1] og tæller ned fra 60 til 0, derefter skal den tage cd[2] og tælle ned fra 88 til 0 osv. Tæller i cd hedder $n fx.

Kan jeg få lidt hjælp til hvordan javascript laves til dette?

Det skal vises i HTML med
document.getElementById("elem8").innerHTML = xxxxx;

Hvis det laves med en function, hvor skal function så sættes ind?

Min hjemmeside har først noget php. Så kommer <HTML><BODY>, hvor jeg også har noget php kode på HTML siden. </BODY></HTML>.
Avatar billede Rune1983 Ekspert
01. februar 2021 - 08:59 #1
Har lige kort lavet dette. Måske du kan flette det ind i dit PHP til de værdier du har brug for.

<table>
    <tr>
        <td>Sat til <?php $AntalSekunder = 3; print $AntalSekunder; ?> sekunder</td>
        <td>
            <input type="hidden" id="idtriggerNext" value="<?php print $AntalSekunder; ?>" />
            <span id="idHour"></span>:
            <span id="idMin"></span>:
            <span id="idSec"></span>
        </td>
    </tr>
    <tr>
        <td>Sat til <?php $AntalSekunder = 5; print $AntalSekunder; ?> sekunder</td>
        <td>
            <input type="hidden" id="idtriggerNext2" value="<?php print $AntalSekunder; ?>" />
            <span id="idHour2"></span>:
            <span id="idMin2"></span>:
            <span id="idSec2"></span>
        </td>
    </tr>
    <tr>
        <td>Sat til <?php $AntalSekunder = 8; print $AntalSekunder; ?> sekunder</td>
        <td>
            <input type="hidden" id="idtriggerNext3" value="<?php print $AntalSekunder; ?>" />
            <span id="idHour3"></span>:
            <span id="idMin3"></span>:
            <span id="idSec3"></span>
        </td>
    </tr>
    <tr>
        <td>Sat til <?php $AntalSekunder = 4; print $AntalSekunder; ?> sekunder</td>
        <td>
            <input type="hidden" id="idtriggerNext4" value="<?php print $AntalSekunder; ?>" />
            <span id="idHour4"></span>:
            <span id="idMin4"></span>:
            <span id="idSec4"></span>
        </td>
    </tr>
</table>
<script>
    var idHour = "idHour";
    var idMin = "idMin";
    var idSec = "idSec";
    var idtriggerNext = "idtriggerNext";
   
    var c = 0;
    var t;
    var running = 1;
    var runningToEnd = 1;
    var Number = 2; // Next
   
    function timedCount(idHour,idMin,idSec,idtriggerNext,StartStopRunning,Number) {
       
        if(document.getElementById(idHour)){
           
        }
       
        if( StartStopRunning != running ) {
            running = StartStopRunning;
        }
       
        if( running == 1 && runningToEnd == 1 && document.getElementById(idHour) ){
            var n = c;
           
            if(n>=3600){
                var h = parseInt(n/3600);
                document.getElementById(idHour).innerHTML = h;
                n = n - (h*3600);
            }else{
                document.getElementById(idHour).innerHTML = "0";
            }
           
            if(n>=60){
                var m = parseInt(n/60);
                if(m<10){
                    var textMin = "0" + m;
                    document.getElementById(idMin).innerHTML = textMin;
                }else{
                    document.getElementById(idMin).innerHTML = m;
                }
                n = n - (m*60);
            }else{
                document.getElementById(idMin).innerHTML = "00";
            }
           
            if(n<10){
                var textSec = "0" + n;
                document.getElementById(idSec).innerHTML = textSec;
            }else{
                document.getElementById(idSec).innerHTML = n;
            }
           
            if( parseInt(document.getElementById(idtriggerNext).value) == c ){
                c = 0;
                var idHourNew = idHour.replace(/[0-9]/g, '');
                idHourNew = idHourNew.concat(Number);
                var idMinNew = idMin.replace(/[0-9]/g, '');
                idMinNew = idMinNew.concat(Number);
                var idSecNew = idSec.replace(/[0-9]/g, '');
                idSecNew = idSecNew.concat(Number);
                var idtriggerNextNew = idtriggerNext.replace(/[0-9]/g, '');
                idtriggerNextNew = idtriggerNextNew.concat(Number);
                Number++;
               
                if(document.getElementById(idHour)){ // Kigger om formodet næste id findes
                    t = setTimeout(function(){ timedCount(idHourNew,idMinNew,idSecNew,idtriggerNextNew,running,Number) }, 1000);
                    return;
                }else{
                    runningToEnd = 2; // Ending counter totally
                    return;
                }
               
            }else{
                c = c + 1;
                t = setTimeout(function(){ timedCount(idHour,idMin,idSec,idtriggerNext,running,Number) }, 1000);
            }
               
          }
    }
    timedCount(idHour,idMin,idSec,idtriggerNext,1,2);   
</script>
Avatar billede tipman Juniormester
02. februar 2021 - 08:27 #2
Ser godt ud Rune. Jeg kan se at jeg nok bare kan lave noget php, som skriver HTML koden (tabellen). Den skal skrives x antal gange. Hele SCRIPT delen ser det ud til at jeg kan skrive 1 gang og kalde mange gange. Men kan den let modificeres til at tælle ned i stedet for?
Avatar billede Rune1983 Ekspert
02. februar 2021 - 09:29 #3
Tænker godt den kan skrives om til at tælle ned i stedet. Men det ikke noget jeg har tid til at gøre desværre.
Hvad er det du skal skrive ud x antal gange? ... er det ikke nemmere med et for loop i PHP eller hvad er begrundelse for at anvende javascript?
Avatar billede tipman Juniormester
02. februar 2021 - 10:15 #4
Det skal bruges til start af kapsejlads. Man tæller ned fra x min til 5 min før start. Her skal gives information på skærmen. Fortsætter til 4 min før start, igen information. 1 min før start skal der ingen informeres. Ved 0 min information. Men nu begynder så en ny nedtælling som ovenfor til start 2,3,...X. Jeg har allerede regnet alle disse tider ud mellem hver start i php og lagt det i en array med information for hver nedtælling. Timeren skal kun vises 1 gang og udskiftes med de forskellige tider. Jeg synes js er lidt svært da det mindste komma forkert gør, at der ikke vises noget på skærmen. Og så skal det flettes sammen med php.
Avatar billede sukos Juniormester
03. februar 2021 - 11:44 #5
Det her brugte jeg til at give brugeren info om hvornår han/hun ville blive logget af, hvis der ingen aktivitet var fra brugern på siden.
Eller d.v.s. først i forbindelse med et lottoscript, hvornår trækningen skete, men senere til automatisk log af på en brugerside

function countd(allseconds,page) {

refresh = (!page ? 0 : 1);

var oneM = 60;
var oneH = (60*60);

var Htime = Math.floor(allseconds/oneH);
var Mtime = Math.floor((allseconds-(Htime*oneH))/oneM);
var Stime = Math.floor(allseconds-(Htime*oneH)-(Mtime*oneM));

document.getElementById("timetext").firstChild.nodeValue=(Htime<10?'0'+Htime:Htime)+' h '+(Mtime<10?'0'+Mtime:Mtime)+' m '+(Stime<10?'0'+Stime:Stime)+' s';


    if(allseconds){


        setTimeout("countd("+(allseconds-1)+","+refresh+");",1000);

    }else{

        if(refresh) {
        window.location.reload();
        }

        .documentgetElementById("timetext").firstChild.nodeValue='Draw is going on!';

    }

}
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