Droid: dynamisches Menü macht was es will ...

Hallo Community!

Erstmal an dieser Stelle ein RIESENGROSSES LOB an das Gesamtprojekt
SELFHTML, dass in beispielloser Weise die Vermittlung von Wissen
im Internet demonstriert.

Ach ja, und frohe Ostern!

Ich habe mein Problem im Chat bereits thematisiert, und mir
wurde auch prompt von @Namor geholfen, nochmal thx.

Folgendes:
Ich habe ein Skript geschrieben, dass das Win98-Menue simuliert.
Beim Ueberfahren eines Links im Hauptmenue wird dynamisch ein Submenue ueber eine Array-gesteuerte Bewegung ausgefahren, und beim Verlassen
verschwindet das Sub wieder.
Das ganze funktioniert wunderbar, solange man auf dem Link verweilt,
bis das Sub ganz ausgefahren ist.
Verlaesst man jedoch den Menuepunkt befor die Bewegung zu Ende ist,
wird die Zaehlvariable fuer das jeweilige Untermenue wieder auf 0
gesetzt, und die Bewegungsschleife beginnt erneut.
D.h. das Teil springt hin und her.
Ganz wild wird's erst, wenn man mit der Maus durch alle Punkte durchsaust, dann macht das Ding was es will.
(Na ja, was es will bestimmt nicht, is ja alles irgendwie logisch ;))
Ich habe schon alles versucht:
Testfunktionen geschrieben, mir jede verdammte Variable zu jedem verdammten Zeitpunkt des Ablaufs ausgeben lassen, aus globalen lokale gemacht und andersrum ...
Doch ich komme nicht dahinter, wie man verhindern kann, dass sich die
Schleifen andauernd erneut initialisieren.

Zum Besseren Nachvollziehen habe ich das Skript samt Source und
einem Antwortformular fuer eure Ideen und Kommentare geuppt, Link folgt.

Vielleicht habe ich das ganze falsch angepackt, vielleicht gibt es aber dennoch einen Weg, das vorhandene Skript zum laufen zu bekommen.
Also bitte ich jeden, der Ahnung und 5 Minuten Zeit hat, einen Blick darauf zu werfen.

Riesen-Thx im Voraus

selfHTML-Schueler
Droid

  1. Hallo du auch,

    ich hab es mal ausprobiert, das einzige Problem bei mir war, das die Menues nicht wieder verschwinden. Ich nehme schon an, das du onMouseout eingebaut hast? (ich hab die Quelle nur schnell überflogen)

    Shade.

    Whistler

  2. Hi,

    Ich habe ein Skript geschrieben, dass das Win98-Menue simuliert.

    [...]

    Vielleicht habe ich das ganze falsch angepackt,

    scheint so:

    JavaScript Error: http://www.winpc.de/test/win.htm, line 19:
    document.all has no properties.

    JavaScript Error: http://www.winpc.de/test/win.htm, line 33:
    document.all has no properties.

    Teste Deine Scripts doch mit mehr als einem Browser...

    vielleicht gibt es aber dennoch einen Weg, das vorhandene Skript zum laufen zu bekommen.

    Ich würde an Deiner Stelle onMouseOut ein window.setTimeout() starten, welches den Layer wieder entfernt (das löst bei passender Abfrage gleichzeitig das Problem, daß man nicht in die Submenus kann). Ferner würde ich onMouseOver zunächst prüfen, ob bereits ein Layer geöffnet ist (das speicherst Du doch irgendwo, oder?) und dann entsprechend diesen erst schließen.

    Also bitte ich jeden, der Ahnung und 5 Minuten Zeit hat, einen Blick darauf zu werfen.

    Um ein fremdes Script dieser Größenordnung zu verstehen, sind 5 Stunden der glaubhaftere Zeitansatz... ich hab mir eigentlich nur die Anzahl der Zeilen angesehen und dann entschieden, die Ursache zu raten :-)

    Cheatah

  3. Hi Droid

    Ganz wild wird's erst, wenn man mit der Maus durch alle Punkte durchsaust, dann macht das Ding was es will.
    (Na ja, was es will bestimmt nicht, is ja alles irgendwie logisch ;))
    Ich habe schon alles versucht:
    Testfunktionen geschrieben, mir jede verdammte Variable zu jedem verdammten Zeitpunkt des Ablaufs ausgeben lassen, aus globalen lokale gemacht und andersrum ...
    Doch ich komme nicht dahinter, wie man verhindern kann, dass sich die
    Schleifen andauernd erneut initialisieren.

    Ich konnte deine Page nur im Sourcecode anschauen, da sie zu einem Browserabsturz bei Netsi 4.61
    und WinNT führt. Hatte jedoch ein ähnliches Problem.

    Ich denke das Problem liegt daran, das nicht etwa wie erwartet bei setTimeout oder setInterval
    nach der vorgegebenen Frist die Funktion ausführt und an der bisherigen Stelle bleibt, sondern das
    der Code darum herum schön weiter abgearbeitet wird und nach der gesetzten Frist die Funktion
    "parallel" zum restlichen Code abläuft. Wenn du also willst, das nach einer Frist eine Funktion ausgeführt
    wird und der restliche Code nicht ausgeführt wird, musst du von Hand eine Warteschleife bauen in der
    Art:

    while aktuelleZeit < anfangsZeit + x { nichts }

    Hoffe es Hilft

    Daniela Koller

  4. Hi Droid!

    Ich hab den Quelltext mal überflogen. Mir fällt auf, daß Du z.B. nicht prüfst, ob beim onMouseout in ein Submenü gewechselt wird. Dadurch wird das Submenü entfernt, sobald man mit der Maus drauf will.

    Du solltest also:

    1. einen Timeout für das Ein- und Ausblenden setzen
    2. den Timeout für das Ausblenden löschen, wenn in ein Submenü gewechselt wird
    3. beim onMouseover auch den Timeout löschen und evtl. angezeigte Submenüs ausblenden
    4. Dir den Selfbrowser 2.61 herunterladen und Dir die Menüfunktionen ansehen ;-) http://www.teamone.de/selfaktuell/extras/selfbrowser.htm

    Gruß
    Thomas

  5. Dank beispielloser Hilfe habe ich das Script zum Laufen bekommen.
    Ach, wie geil. ;)

    Danke an alle Poster, Mailer und Sysops *g*

    Schaut euch das fertige Werk doch mal an, wenn ihr Lust habt.

    http://www.winpc.de/test/win.htm

    (nur mit IE)

    cya, Droid.

    1. Hi Droid!

      Schoen, dass es geht. Setz aber den Timeout fuers Ausblenden etwas hoeher. Wenn ich naemlich nicht schnell genug mit der Maus auf den Submenue bin, ist es schon wieder weg.

      Gruß
      Thomas

      1. Hi Thomas,

        Schoen, dass es geht. Setz aber den Timeout fuers Ausblenden etwas hoeher.

        Mach ich. *g*

        nochmal thx

        Driod