div-layer positionierung - timingproblem
Sorgenkind Mech
- javascript
0 Cheatah
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
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
aaaahhh alles klar kapisch ...
moin
hast ne idee wie ich das anders machen kann? ich komm irgentwie nich drauf ;(
bin heut ziemlich denkschwach
gruß
Hi,
hast ne idee wie ich das anders machen kann? ich komm irgentwie nich drauf ;(
dann lies mein Fazit noch mal ... :-)
Cheatah
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ß
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