Avatar billede andersmd Nybegynder
02. november 2007 - 12:25 Der er 10 kommentarer og
1 løsning

For-løkke med setTimeout

Jeg kan ikke finde ud af hvordan man laver en for-løkke med ventetid så den venter 1 second efter hver løkke

Kan nogen hjælpe mig???
Avatar billede w13 Novice
02. november 2007 - 12:34 #1
Du må lægge den i en funktion:
------------------------------
var i=0, iter=10;
function MyLoop(){
    for(;i<iter;i++){
        //kommandoer
        setTimeout("MyLoop()",1000);
    }
}
------------------------------
Men så er der jo egentlig ikke meget grund til at have en for-løkke. ;)
Så bare:
------------------------------
var i=0, iter=10;
function MyLoop(){
    //kommandoer
    i++;
    if(i=iter) setTimeout("MyLoop()",1000);
}
------------------------------
Alt afhængigt af dit formål, kunne du også bare ha' det i en setInterval, men den skal jo så stoppes, når for-løkken er slut.
Avatar billede andersmd Nybegynder
02. november 2007 - 12:49 #2
Altså jeg vil gerne lave en side hvor du kan skrive et tal ind så den ændrer højden på min div langsomt.
Min kode indtil videre ser Sådan her ud:
--------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
  <title>Graf</title>
  <style>
    div.graf1
    {
    background: red;
    hieght: 0px;
    width: 90px;
    }
    div.graf2
    {
    background: #000000;
    height: 0px;
    width: 90px;
    }
    div.graf3
    {
    background: #000000;
    height: 150px;
    width: 90px;
    }
    div.graf4
    {
    background: #000000;
    height: 180px;
    width: 90px;
    }
    tr.Grafbox
    {
    vertical-align: bottom;
    }
    td.tdLeftBottom
    {
    border-left: 1px solid #000000;
    border-bottom: 1px solid #000000;
    }
    td.tdBottom
    {
    border-bottom: 1px solid #000000;
    }
    td
    {
    padding: 10px;
    padding-bottom: 0px;
    }
    </style>
</head>
<body>
  <form name="fGraf">
  <table cellspacing="0" border="0" height="500px">
    <tr class="Grafbox">
      <td rowspan="2"><input name="inGraf1"><br>
                      <input name="inGraf2"><br>
                      <input name="inGraf3"><br>
                      <input name="inGraf4"><br>
                      <button name="KnapVisGraf">Vis graf</button></td>
      <td class="tdLeftBottom"><div class="graf1" id="idGraf1"></div></td>
      <td class="tdBottom"><div class="graf2" id="idGraf2"></div></td>
      <td class="tdBottom"><div class="graf3"></div></td>
      <td class="tdBottom"><div class="graf4"></div></td>
    </tr>
    <tr>
      <td colspan="4"></td>
    </tr>
  </table>
  </form>
  <script language="javascript">
  <!--Variabler-->
    var vGraf1=0
    var vGraf2=0
    var vGraf3=0
    var vGraf4=0
  <!--Events-->
    document.fGraf.KnapVisGraf.onclick=funGraf1;
  <!--Funktioner-->
    function funGraf1()
    {
    vGraf1=document.fGraf.inGraf1.value;
    document.getElementById('idGraf1').style.height=vGraf1;
    for (i=1;i<200;i=i+1)
    {
    setTimeout("document.getElementById('idGraf2').style.height=i;",1000);
  </script>
</body>
</html>
Avatar billede w13 Novice
02. november 2007 - 12:59 #3
Ok. Men kan du ikke bare bruge mit sidste eksempel så?

Lige nu i din kode mangler du i øvrigt at afslutte både for-løkken og funktionen.
Avatar billede w13 Novice
02. november 2007 - 13:02 #4
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
  <title>Graf</title>
  <style>
    div.graf1
    {
    background: red;
    hieght: 0px;
    width: 90px;
    }
    div.graf2
    {
    background: #000000;
    height: 0px;
    width: 90px;
    }
    div.graf3
    {
    background: #000000;
    height: 150px;
    width: 90px;
    }
    div.graf4
    {
    background: #000000;
    height: 180px;
    width: 90px;
    }
    tr.Grafbox
    {
    vertical-align: bottom;
    }
    td.tdLeftBottom
    {
    border-left: 1px solid #000000;
    border-bottom: 1px solid #000000;
    }
    td.tdBottom
    {
    border-bottom: 1px solid #000000;
    }
    td
    {
    padding: 10px;
    padding-bottom: 0px;
    }
    </style>
</head>
<body>
  <form name="fGraf">
  <table cellspacing="0" border="0" height="500px">
    <tr class="Grafbox">
      <td rowspan="2"><input name="inGraf1"><br>
                      <input name="inGraf2"><br>
                      <input name="inGraf3"><br>
                      <input name="inGraf4"><br>
                      <button name="KnapVisGraf">Vis graf</button></td>
      <td class="tdLeftBottom"><div class="graf1" id="idGraf1"></div></td>
      <td class="tdBottom"><div class="graf2" id="idGraf2"></div></td>
      <td class="tdBottom"><div class="graf3"></div></td>
      <td class="tdBottom"><div class="graf4"></div></td>
    </tr>
    <tr>
      <td colspan="4"></td>
    </tr>
  </table>
  </form>
  <script language="javascript">
  <!--Variabler-->
    var vGraf1=0
    var vGraf2=0
    var vGraf3=0
    var vGraf4=0
  <!--Events-->
    document.fGraf.KnapVisGraf.onclick=funGraf1;
  <!--Funktioner-->
    var i=0;
    function funGraf1()
    {
    vGraf1=document.fGraf.inGraf1.value;
    document.getElementById('idGraf1').style.height=vGraf1;
    i++;
    if(i>200) setTimeout("document.getElementById('idGraf2').style.height=i;",1000);
    }
  </script>
</body>
</html>
Avatar billede w13 Novice
02. november 2007 - 13:03 #5
Hov:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
  <title>Graf</title>
  <style>
    div.graf1
    {
    background: red;
    hieght: 0px;
    width: 90px;
    }
    div.graf2
    {
    background: #000000;
    height: 0px;
    width: 90px;
    }
    div.graf3
    {
    background: #000000;
    height: 150px;
    width: 90px;
    }
    div.graf4
    {
    background: #000000;
    height: 180px;
    width: 90px;
    }
    tr.Grafbox
    {
    vertical-align: bottom;
    }
    td.tdLeftBottom
    {
    border-left: 1px solid #000000;
    border-bottom: 1px solid #000000;
    }
    td.tdBottom
    {
    border-bottom: 1px solid #000000;
    }
    td
    {
    padding: 10px;
    padding-bottom: 0px;
    }
    </style>
</head>
<body>
  <form name="fGraf">
  <table cellspacing="0" border="0" height="500px">
    <tr class="Grafbox">
      <td rowspan="2"><input name="inGraf1"><br>
                      <input name="inGraf2"><br>
                      <input name="inGraf3"><br>
                      <input name="inGraf4"><br>
                      <button name="KnapVisGraf">Vis graf</button></td>
      <td class="tdLeftBottom"><div class="graf1" id="idGraf1"></div></td>
      <td class="tdBottom"><div class="graf2" id="idGraf2"></div></td>
      <td class="tdBottom"><div class="graf3"></div></td>
      <td class="tdBottom"><div class="graf4"></div></td>
    </tr>
    <tr>
      <td colspan="4"></td>
    </tr>
  </table>
  </form>
  <script language="javascript">
  <!--Variabler-->
    var vGraf1=0
    var vGraf2=0
    var vGraf3=0
    var vGraf4=0
  <!--Events-->
    document.fGraf.KnapVisGraf.onclick=funGraf1;
  <!--Funktioner-->
    var i=0;
    function funGraf1()
    {
    vGraf1=document.fGraf.inGraf1.value;
    document.getElementById('idGraf1').style.height=vGraf1;
    i++;
    if(i<200) setTimeout("document.getElementById('idGraf2').style.height=i",1000);
    }
  </script>
</body>
</html>
Avatar billede andersmd Nybegynder
02. november 2007 - 13:20 #6
Ja Tak.
Det virker fint bortset fra det med at den ikke stiger langsomt
Avatar billede sherlock Nybegynder
02. november 2007 - 13:21 #7
Ret funGraf1 til:
    function funGraf1()
    {
    vGraf1=document.fGraf.inGraf1.value;
    document.getElementById('idGraf1').style.height=vGraf1;
    i++;
    if(i<200)
    {
      document.getElementById('idGraf2').style.height=i;
      setTimeout("funGraf1()", 100);
    }
    }
Avatar billede w13 Novice
02. november 2007 - 13:36 #8
Ja, den smuttede lige.
Avatar billede andersmd Nybegynder
02. november 2007 - 13:53 #9
Mange tak det virker jo lige som det skal(-:
Avatar billede sherlock Nybegynder
02. november 2007 - 14:25 #10
100% til w13.
Avatar billede w13 Novice
02. november 2007 - 17:36 #11
Ok. =) Tak. Og her er et svar.
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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