tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
953
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Michael_K Michael_K ist offline Mitglied Bronze
    Registriert seit
    Mar 2006
    Ort
    Augsburg
    Beiträge
    25
    Hallo,

    mit folgender Funktion will ich automatisch ein angezeigtes Bild austauschen:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    function imgSlider() {
        Effect.Fade('references');
        document.references.src = "../html/img/pool/"+images[imgNumber];
        Effect.Appear('references');
        imgNumber++;
        if (imgNumber >= imageAmount) {
            imgNumber = 0;
        }
        setTimeout('imgSlider()', 5000);
    }
    Der Wechsel an sich funktioniert einwandfrei. Jetzt möchte ich die ganze Sache mit Scriptaculous allerdings ein wenig aufhübschen. Und da beginnt der Ärger.

    Nach meiner Logik müsste durch meine Funktion 3 Sekunden lang ein Bild angezeigt werden. Dann wird dieses aus- und das nächste Bild eingeblendet, was wiederum 3 Sekunden lang angezeigt wird.
    Nur hat mein Browser seine eigene Logik. Er fadet das Bild ein, und kaum ist es geladen, verschwindet es wieder - dann bleibt die Fläche für 3 Sekunden weiß, bis das nächste Bild kurz erscheint.
    Wenn ich die beiden Effekt-Befehle entferne, funktioniert alles wie gewollt, nur eben nicht so hübsch.

    Wo liegt da mein (Denk-)Fehler?

    Grüße
    Michael
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,

    dein Denkfehler liegt darin, dass du davon ausgehst, dass Appear erst gestartet wird, wenn Fade beendet ist.
    An dem ist es nicht, das läuft alles gleichzeitig(die Standarddauer bei Effekten ist bei Scriptaculous übrigens 1 Sekunde und nicht 3 Sekunden).

    Für das, was du vorhast, benötigst du den Queue

    Optimal wäre aber wahrscheinlich, wenn du dies alles über Callback-Funktionen regelst.
    Also quasi:
    1. wenn Fade fertig, Bild austauschen und Appear aufrufen
    2. wenn Appear fertig, Timeout starten
     

  3. #3
    Michael_K Michael_K ist offline Mitglied Bronze
    Registriert seit
    Mar 2006
    Ort
    Augsburg
    Beiträge
    25
    Hi Sven,

    danke für Deinen Hinweis! Wenn ich den Queue wie folgt benutze, wird alles nahezu sauber dargestellt:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    function imgSlider() {
        Effect.Fade('references', { queue: 'end', delay: '3' });
        document.getElementById('references').src = "../html/img/references/"+images[imgNumber];
        Effect.Appear('references', { queue: 'front' });
        imgNumber++;
        if (imgNumber >= imageAmount) {
            imgNumber = 0;
        }
        setTimeout('imgSlider()', 5000);
    }
    Ein Problem gibt es: teilweise wird der Fade-Effekt abgeschnitten. Ich vermute mal, das liegt daran, dass der setTimeout-Zeitwert nicht immer ganz synchron mit der Zeit verstreicht, die meine Funktion braucht.

    Vielleicht geht es mit Callback-Funktionen doch besser. Könntest Du mir genauer erklären, wie das ablaufen müsste? Habe mich über diese Funktionsweise informiert, aber verstehe leider nicht ganz, wie ich die konkret auf mein Problem anwenden müsste.
     

Ähnliche Themen

  1. Scriptaculous & jQuery
    Von maarian im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 04.04.09, 17:53
  2. Problem mit Drag von Scriptaculous
    Von Paspirgilis im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 27.11.08, 12:43
  3. Drag `n Drop mit Scriptaculous
    Von ahamm im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 17.12.07, 12:11
  4. scriptaculous drag & drop
    Von matze-peng im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 04.09.06, 14:30
  5. Probleme mit scriptaculous
    Von tobee im Forum CSS
    Antworten: 4
    Letzter Beitrag: 21.07.06, 15:01