• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Schliefe mit setInterval

hallo,
habe einbisschen im internet gesucht wie man eine schleife mit set interval macht.. es will bei mir jedoch nicht recht funkionieren :/
Code:
function bewegung(id,x,y,interval) {
        hinzufuegen(id,x,y);
        x = x+10;
        y = y+10;
        id++;
        if(x > 390 || y > 390 || x < 0 || y < 0){
             clearInterval(interval);
             alert("Du hast leider verloren!");
        }
         
}
Code:
 var id = 0;
             var x = 200;
             var y = 200;
             
             var interval = window.setInterval("bewegung(id,x,y,interval)", 1000);
das element, das durch "hinzufügen()" hinzugefügt wird wir leider nur einmal erstellt und nicht solange bis x oder y größer als 390 sind.. daraus schließe ich dass meine schleife keine schleife ist; ich kann mir jedoch nicht denken woran es liegt..
eigendlich sollte jede sekunde ein neues element erstellt werden, das um 10 px nach unten und nach rechts verschoben ist
viele grüße simon
 
Denke es wird jedes mal ein Element mit der gleichen Id erstellt. So weit ich weiss merkt sich setIntervall die Werte die es einsetzen soll.
Somit wird deine id jedes mal 0 und deine position jedes mal 200/200.
Probier ma garnichts zu übergeben und direkt auf die Variablen zuzugreifen. Denn du kannst aus Funktionen heraus auf Variablen im Window Kontext zugreifen :)
Also einfach nur die parameter rausnehmen. Dann könnte es funktionieren :)
 
Zwei Tipps:
- setTimeout ist setInterval gegenüber zu bevorzugen. Denn egal, was passiert, es werden bei setInterval jedes Mal Funktionen alle x Sekunden ausgeführt. Wenn der PC zu langsam ist oder auf einem anderen Tab Facebook läuft :), kann es sein, dass es zu einem Callback-Stau kommt, was wie eine Endlosschleife reagiert auf Dauer.

- setInterval und setTimeout verlangen ein Callback. Was du angibst, ist ein eval-String.
PHP:
var id = 0;
var x = 0;
var y = 0;
var bewegung = function() {
    // Hier machst du deinen Kram mit den Variablen.
    if (noch_nicht_fertig) {
        window.setTimeout(bewegung, 1000);
    } else /*if (fertig)*/ {
        window.alert("Du hast leider verloren!");
    }
};
window.setTimeout(bewegung, 1000);
 
- setTimeout ist setInterval gegenüber zu bevorzugen. Denn egal, was passiert, es werden bei setInterval jedes Mal Funktionen alle x Sekunden ausgeführt. Wenn der PC zu langsam ist oder auf einem anderen Tab Facebook läuft :), kann es sein, dass es zu einem Callback-Stau kommt, was wie eine Endlosschleife reagiert auf Dauer.

Solche Sachen kann man eventuell beachten wenn das Ausführungsintervall < 100 ms ist oder die auszuführende Funktion extrem Komplexe Berechnungen und Aktionen durchführt. Bei einer Sekunde kann man das getrost vernachlässigen :)
Aber falsch ist es trotzdem nicht. Hab bisher auch noch nicht drauf geachtet wenn ich Funktionen umgesetzt habe, da meine Intervalle meist > 300 waren :)
 
Timeout wird doch nur einmal ausgeführt oder?
ich muss die funktion aber solange ausführen bis ich sie wieder beende insofern ist timeout wohl eher ungeeignet oder?
 
- setTimeout ist setInterval gegenüber zu bevorzugen. Denn egal, was passiert, es werden bei setInterval jedes Mal Funktionen alle x Sekunden ausgeführt.
Das ist falsch. Interval wird nur einmal ausgeführt, der nächste Interval wird gestartet, wenn der erste fertig ist. Es kommt also zu keinem "callback Stau".

setTimeout ist vor zuziehen wenn die Intervalle kurz sein sollen, da zumindest im FF diese seltsamerweise regelmäßiger und in kürzeren Abständne erfolgen.
 
Timeout wird doch nur einmal ausgeführt oder?
ich muss die funktion aber solange ausführen bis ich sie wieder beende insofern ist timeout wohl eher ungeeignet oder?
Doch es ist geeignet, du musst den Timeout jedes Mal auf's neue aufrufen, aber das erkennst du auch in dem Beispiel von Asterix
 
Das ist falsch. Interval wird nur einmal ausgeführt, der nächste Interval wird gestartet, wenn der erste fertig ist. Es kommt also zu keinem "callback Stau".

setTimeout ist vor zuziehen wenn die Intervalle kurz sein sollen, da zumindest im FF diese seltsamerweise regelmäßiger und in kürzeren Abständne erfolgen.

Gibts da irgend eine Faustregel oder eigene Erfahrung ab wann sich die Timeout-variante lohnt? Meine Erfahrung sagt mir nur, dass setIntervall ausgereicht hat bei Werten von 400 ms.
 
Meine ist, dass die meisten Browsern nicht schneller als 10ms sind. Bei 400 ist's egal. Interval hat da den Vorteil, dass die Intervalle genauer sind
 
Zurück
Oben