Sorgenkind Mech: div-layer positionierung - timingproblem

moin leutz

also nach studien des forums bin ich ja nu eigentlich fast fertig, außer der zufallsgenerator, aber dat kommt noch

es geht um folgendes: ich will einen div-layer über den bildschirm (innerhalb des browserfensters versteht sich) fliegen lassen

so, dazu verwnde ich nu folgende funktion:

function ferien()
{
 var i=0;
 startx=document.getElementById('ferienlayer').style.left.slice(0,2);
 startx=Number(startx);
 starty=document.getElementById('ferienlayer').style.top.slice(0,2);
 starty=Number(starty);
 lbreite=document.getElementById('ferienlayer').style.width.slice(0,-2);
 grenzwert=0-Number(lbreite);
 for(i=startx;i>grenzwert;i--)
 {
  window.setTimeout("setzelayer('ferienlayer',"+i+")",1000);
 }
}
function setzelayer(layer,x,y)
{
 if(x) document.getElementById(layer).style.left=x+"px";
 if(y) document.getElementById(layer).style.top=y+"px";
 //alert("X: "+x+"\nY: "+y);
}

tja, nach der eingestellten sekunde hüpft das teil aber gleich weg, und schwebt nich schön wie es soll

eigentlich müsste doch dem code zufolge der layer immer nach einer sekunde einen pixel nach links rutschen oder?`

ih hoffe jemand sieht den fehler

thx

viele grüße

  1. Hi,

    for(i=startx;i>grenzwert;i--)
    {
      window.setTimeout("setzelayer('ferienlayer',"+i+")",1000);
    }

    was passiert hier? Richtig: Es wird eine for-Schleife abgearbeitet, in der in jedem Durchlauf nichts anderes passiert, als einen neuen Timeout zu definieren. Das geht ziemlich fix, mehr als 'ne Handvoll Millisekunden sollte das nicht dauern.

    Jeder einzelne Timeout wird genau eine Sekunde nach Start die setzelayer()-Funktion ausführen. Der Zeitraum, innerhalb dessen das passiert, ist der gleiche wie der, in dem die for-Schleife abgearbeitet wurde, also 'ne Handvoll Millisekunden. Ein Timeout ist nun mal keine Pause, sondern nur der Auftrag, nach Ablauf einer Zeitspanne etwas zu tun.

    Fazit: Du möchtest innerhalb der setzelayer()-Funktion bei Bedarf einen neuen Timeout definieren. Ohne for-Schleife.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. aaaahhh alles klar kapisch ...

      moin

      hast ne idee wie ich das anders machen kann? ich komm irgentwie nich drauf ;(

      bin heut ziemlich denkschwach

      gruß

      1. Hi,

        hast ne idee wie ich das anders machen kann? ich komm irgentwie nich drauf ;(

        dann lies mein Fazit noch mal ... :-)

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. naja, ich weiß, dass da n lösungsvorschlag drinlag, aber ich konnte ihn nich wirklich verwerten

          der vollständigkeit halber, ich habs jetz so gemacht:

          function ferien()
          {
           startx=document.getElementById('ferienlayer').style.left.slice(0,-2);
           startx=Number(startx);
           i=startx;
           starty=document.getElementById('ferienlayer').style.top.slice(0,-2);
           starty=Number(starty);
           lbreite=document.getElementById('ferienlayer').style.width.slice(0,-2);
           grenzwert=0-Number(lbreite);
           ferienmove();
          }

          function ferienmove()
          {
           if(i>grenzwert) window.setTimeout("setzelayer('ferienlayer',"+i+",'')",50);
           i--;
          }
          function setzelayer(layer,x,y)
          {
           if(x) document.getElementById(layer).style.left=x+"px";
           if(y) document.getElementById(layer).style.top=y+"px";
           //alert("X: "+x+"\nY: "+y);
           ferienmove();
          }

          ansonsten danke für die aufklärung

          gruß

          1. Hi,

            naja, ich weiß, dass da n lösungsvorschlag drinlag, aber ich konnte ihn nich wirklich verwerten

            wenn Du es nicht kannst, warum hast Du es dann gemacht? ;-)

            der vollständigkeit halber, ich habs jetz so gemacht:

            Ungefähr das meinte ich auch.

            Cheatah

            --
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes