| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Apr 2004
Beiträge: 6
| Fade und setInterval Problem
Guten Abend Ich habe eine Fadefunktion, welche das aktuelle Bild ausblendet und ein neues Bild einblendet. Das ganze für eine variable Anzahl Bilder, welche über PHP aus einem Verzeichnis ausgelesen und über ein Array übergeben werden. Grundsätzlich funktioniert alles aber... Mit untenstehendem Skript kann ich im setInterval irgendeine Zeitgrösse angeben, das hat keinen Einfluss - die Funktion wird fortlaufend immer wieder ausgeführt. Ich möchte aber bestimmen können wieviel Zeit vergehen soll bis der nächste Fade stattfinden soll. Ich brauche dringend einen Tip! Hier die Funktion und der Aufruf derselben: rein = 0; raus = 999; speed = 2; fade = function (rein, raus, speed) { this.onEnterFrame = function() { this["bild"+rein]._alpha +=speed; this["bild"+raus]._alpha -=speed; if(this["bild"+rein]._alpha >= 100 && this["bild"+raus]._alpha <=0) { this["bild"+rein]._alpha = 100; this["bild"+raus]._alpha = 0; raus = rein; if(rein < pic_count - 1){ rein = rein + 1; } else { rein = 0; } delete this.onEnterFrame; } } } setInterval(faden(rein, raus, speed), 10000); |
| | |
| | #2 (permalink) | |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.322
| Zitat:
dann das interval löschen um es mit einer anderen dauer neu zu starten: function fade(rein, raus, speed) { clearInterval(this.si); ... var dauer=13000; // z.b. this.si=setInterval(this, "fade", dauer, rein, raus, speed); } this.si=setInterval(this, "fade", 10000, rein, raus, speed);
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (25-01-2008 um 20:00 Uhr) | |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Apr 2004
Beiträge: 6
|
Vielen Dank erstmal für Deine Antwort. Wenn ich das Script nach Deinen Angaben anpasse, dann geht gar nichts mehr, das heisst, nicht einmal das erste Bild wird eingefadet... Ich habe dann Deinen Input aufgenommen und um Input aus der Flash Hilfe ergänzt - das ist das Resultat: rein = 0; raus = 999; speed = 2; obj = new Object(); obj.fade = function (rein, raus, speed) { this.onEnterFrame = function() { this["bild"+rein]._alpha +=speed; this["bild"+raus]._alpha -=speed; if(this["bild"+rein]._alpha >= 100 && this["bild"+raus]._alpha <=0) { this["bild"+rein]._alpha = 100; this["bild"+raus]._alpha = 0; raus = rein; if(rein < pic_count - 1){ rein = rein + 1; } else { rein = 0; } //delete this.onEnterFrame; } } } setInterval(obj, "fade", 10000, rein, raus, speed); ... funktioniert leider auch nicht ... Weiterer Tip? |
| | |
| | #4 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.322
|
*
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (25-01-2008 um 20:33 Uhr) |
| | |
| | #6 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.322
|
hab's gerade geändert
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #7 (permalink) |
| Neuer User Registriert seit: Apr 2004
Beiträge: 6
|
Das Interval wird wie gewünscht aufgerufen, ich sehe jetzt, was das verbleibende Problem ist. Die Variable zählt nicht hoch, daher wird wahrscheinlich immer dasselbe Bild ein- und ausgefadet. Sorry, aber ich habe das mit den Variabeln noch nie verstanden - weshalb funktioniert das hier nicht, dass die Variable bei jedem Funktionsaufruf um 1 hochgezählt wird? function fade(rein, raus, speed) { // testen, dass die funktion aufgerufen wird und ob die variablen ankommen trace(this+" rein:"+rein+" raus:"+raus+" speed:"+speed); globale_rein = rein + 1; // } // // du benützt in fade diese globalen variablen, da du nicht korrekt übergibst. var globale_rein = 0; var globale_raus = 999; var globale_speed = 2; this.si = setInterval(this, "fade", 1000, globale_rein, globale_raus, globale_speed); |
| | |
| | #8 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.322
|
globale_rein = rein + 1; du führst immer wieder die selbe rechenoperation aus. warum sollte dabei ein anderes ergebnis herauskommen? so wird der wert von globale_rein um eins erhöht: globale_rein++; oder so um einen beliebigen betrag globale_rein+=12; deine varinate kann nur gehen, wenn du z.b. rein erhöhst: globale_rein = rein + 1; rein+=1; rein übergibst du in das nächste interval. somit ist es dann um 1 höher.
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #9 (permalink) |
| Neuer User Registriert seit: Apr 2004
Beiträge: 6
|
Ich komme mir sehr blöd vor. Es funktioniert auch mit Deinen Schreibweisen nicht. So wie Du schreibst ist meine Variante ungeschickt? Was wäre denn eleganter? Ich muss ja innerhalb dieser Funktion dafür sorgen, dass beim nächsten Aufruf auch das nächste Bild eingefadet wird... |
| | |
| | #10 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.322
|
weiss nicht, was dein problem ist? du hattest geschrieben ".. Grundsätzlich funktioniert alles ... Ich möchte aber bestimmen können wieviel Zeit vergehen soll bis der nächste Fade stattfinden soll .." hier das ganze auf ein minimum reduziert, zum besseren verständnis: Code: rein = 0;
dauer = 3333;
//
function fade() {
// besser das interval stoppen, damit es keine überschneidungen gibt
clearInterval(si);
// hier deine eigentliche fade-function
this.onEnterFrame = function() {
// ...
delete this.onEnterFrame;
// wenn das faden fertig ist, dann
// die globale variable um eins erhöht
rein++;
// und auf zum nächsten faden
si = setInterval(this, "fade", dauer);
};
}
si = setInterval(this, "fade", dauer);
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (26-01-2008 um 16:31 Uhr) |
| | |
| | #11 (permalink) |
| Neuer User Registriert seit: Apr 2004
Beiträge: 6
|
rein = 0; raus = 999; speed = 2; dauer = 5000; function fade(rein, raus, speed) { clearInterval(si); trace("rein:"+rein+" raus:"+raus+" speed:"+speed); this.onEnterFrame = function() { this["bild"+rein]._alpha +=speed; this["bild"+raus]._alpha -=speed; if(this["bild"+rein]._alpha >= 100 && this["bild"+raus]._alpha <=0) { this["bild"+rein]._alpha = 100; this["bild"+raus]._alpha = 0; delete this.onEnterFrame; raus = rein; if(rein < pic_count-1){ rein++; } else { rein = 0; } si = setInterval(this, "fade", dauer, rein, raus, speed); } } } si = setInterval(this, "fade", dauer, rein, raus, speed); So funktioniert das Ding und ich möchte Dir herzlich für Deine geduldige Hilfe danken!! |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |